{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## CRF Suite version\n",
    "\n",
    "http://www.wildml.com/2016/08/rnns-in-tensorflow-a-practical-guide-and-undocumented-features/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set_context(\"poster\")\n",
    "sns.set_style(\"ticks\")\n",
    "\n",
    "from itertools import chain\n",
    "\n",
    "from sklearn.metrics import make_scorer\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "from sklearn.grid_search import RandomizedSearchCV\n",
    "\n",
    "import sklearn_crfsuite\n",
    "from sklearn_crfsuite import scorers\n",
    "from sklearn_crfsuite import metrics\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "from sklearn.grid_search import RandomizedSearchCV\n",
    "\n",
    "import regex as re\n",
    "from collections import namedtuple, defaultdict, Counter, OrderedDict\n",
    "from IPython.display import display\n",
    "from joblib import load, dump, Parallel, delayed\n",
    "\n",
    "import os, string, sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "class RegexFeatures(object):\n",
    "    PATTERNS = {\n",
    "        \"isInitCapitalWord\": re.compile(r'^[A-Z][a-z]+'),\n",
    "        \"isAllCapitalWord\": re.compile(r'^[A-Z][A-Z]+$'),\n",
    "        \"isAllSmallCase\": re.compile(r'^[a-z]+$'),\n",
    "        \"isWord\": re.compile(r'^[a-zA-Z][a-zA-Z]+$'),\n",
    "        \"isAlphaNumeric\": re.compile(r'^\\p{Alnum}+$'),\n",
    "        \"isSingleCapLetter\": re.compile(r'^[A-Z]$'),\n",
    "        \"containsDashes\": re.compile(r'.*--.*'),\n",
    "        \"containsDash\": re.compile(r'.*\\-.*'),\n",
    "        \"singlePunctuation\": re.compile(r'^\\p{Punct}$'),\n",
    "        \"repeatedPunctuation\": re.compile(r'^[\\.\\,!\\?\"\\':;_\\-]{2,}$'),\n",
    "        \"singleDot\": re.compile(r'[.]'),\n",
    "        \"singleComma\": re.compile(r'[,]'),\n",
    "        \"singleQuote\": re.compile(r'[\\']'),\n",
    "        \"isSpecialCharacter\": re.compile(r'^[#;:\\-/<>\\'\\\"()&]$'),\n",
    "        \"fourDigits\": re.compile(r'^\\d\\d\\d\\d$'),\n",
    "        \"isDigits\": re.compile(r'^\\d+$'),\n",
    "        \"isNumber\": re.compile(r'^((\\p{N}{,2}([,]?\\p{N}{3})+)(\\.\\p{N}+)?)$'),\n",
    "        \"containsDigit\": re.compile(r'.*\\d+.*'),\n",
    "        \"endsWithDot\": re.compile(r'\\p{Alnum}+\\.$'),\n",
    "        \"isURL\": re.compile(r'^http[s]?://'),\n",
    "        \"isMention\": re.compile(r'^(RT)?@\\p{Alnum}+$'),\n",
    "        \"isHashtag\": re.compile(r'^#\\p{Alnum}+$'),\n",
    "        \"isMoney\": re.compile(r'^\\$((\\p{N}{,2}([,]?\\p{N}{3})+)(\\.\\p{N}+)?)$'),\n",
    "    }\n",
    "    def __init__(self):\n",
    "        print \"Initialized RegexFeature\"\n",
    "    @staticmethod\n",
    "    def process(word):\n",
    "        features = dict()\n",
    "        for k, p in RegexFeatures.PATTERNS.iteritems():\n",
    "            if p.match(word):\n",
    "                features[k] = True\n",
    "        return features\n",
    "    \n",
    "    \n",
    "def classification_report_to_df(report):\n",
    "    report_list = []\n",
    "    for i, line in enumerate(report.split(\"\\n\")):\n",
    "        if i == 0:\n",
    "            report_list.append([\"class\", \"precision\", \"recall\", \"f1-score\", \"support\"])\n",
    "        else:\n",
    "            line = line.strip()\n",
    "            if line:\n",
    "                if line.startswith(\"avg\"):\n",
    "                    line = line.replace(\"avg / total\", \"avg/total\")\n",
    "                line = re.split(r'\\s+', line)\n",
    "                report_list.append(tuple(line))\n",
    "    return pd.DataFrame(report_list[1:], columns=report_list[0])\n",
    "\n",
    "\n",
    "DATA_DIR=\"data/data/\"\n",
    "CLEANED_DIR=\"data/cleaned/\"\n",
    "\n",
    "Tag = namedtuple(\"Tag\", [\"token\", \"tag\"])\n",
    "\n",
    "def load_sequences(filename, sep=\"\\t\", notypes=False, test_data=False):\n",
    "    sequences = []\n",
    "    with open(filename) as fp:\n",
    "        seq = []\n",
    "        for line in fp:\n",
    "            line = line.strip()\n",
    "            if line:\n",
    "                line = line.split(sep)\n",
    "                if test_data:\n",
    "                    assert len(line) == 1\n",
    "                    line.append(\"?\")\n",
    "                if notypes:\n",
    "                    line[1] = line[1][0]\n",
    "                seq.append(Tag(*line))\n",
    "            else:\n",
    "                sequences.append(seq)\n",
    "                seq = []\n",
    "        if seq:\n",
    "            sequences.append(seq)\n",
    "    return sequences\n",
    "\n",
    "\n",
    "def load_vocab(filename):\n",
    "    vocab = set()\n",
    "    with open(filename) as fp:\n",
    "        for line in fp:\n",
    "            line = line.strip()\n",
    "            vocab.add(line)\n",
    "    return vocab      \n",
    "\n",
    "    \n",
    "def print_transitions(trans_features):\n",
    "    for (label_from, label_to), weight in trans_features:\n",
    "        print(\"%-6s -> %-7s %0.6f\" % (label_from, label_to, weight))\n",
    "        \n",
    "def print_state_features(state_features):\n",
    "    for (attr, label), weight in state_features:\n",
    "        print(\"%0.6f %-8s %s\" % (weight, label, attr)) \n",
    "        \n",
    "        \n",
    "def plot_cm(y_test, y_pred, labels=[]):\n",
    "    labels_s = dict((k,i) for i,k in enumerate(labels))\n",
    "    cm = np.zeros((len(labels), len(labels)))\n",
    "    for i,j in zip(sum(y_test, []), sum(y_pred, [])):\n",
    "        i = labels_s[i]\n",
    "        j = labels_s[j]\n",
    "        cm[i,j] += 1\n",
    "    with plt.rc_context(rc={'xtick.labelsize': 12, 'ytick.labelsize': 12,\n",
    "                       'figure.figsize': (16,14)}):\n",
    "        sns.heatmap(cm * 100/ cm.sum(axis=1, keepdims=True),\n",
    "                    #cmap=sns.cubehelix_palette(n_colors=100, rot=-.4, as_cmap=True),\n",
    "                    cmap=\"Greys_r\",\n",
    "                    xticklabels=labels,\n",
    "                    yticklabels=labels)\n",
    "        plt.ylabel(\"True labels\")\n",
    "        plt.xlabel(\"Predicted labels\")\n",
    "    print cm.shape\n",
    "    return cm\n",
    "\n",
    "\n",
    "def print_sequences(sequences, predictions, filename, test_data=False):\n",
    "    with open(filename, \"wb+\") as fp:\n",
    "        for seq, pred in zip(sequences, predictions):\n",
    "            for t, p in zip(seq, pred):\n",
    "                token, tag = t\n",
    "                if tag[0] == \"U\":\n",
    "                    tag = \"B%s\" % tag[1:]\n",
    "                if tag[0] == \"E\":\n",
    "                    tag = \"I%s\" % tag[1:]\n",
    "                if p[0] == \"U\":\n",
    "                    p = \"B%s\" % p[1:]\n",
    "                if p[0] == \"E\":\n",
    "                    p = \"I%s\" % p[1:]\n",
    "                if test_data:\n",
    "                    line = \"\\t\".join((token, p))\n",
    "                else:\n",
    "                    line = \"\\t\".join((token, tag, p))\n",
    "                print >> fp, line\n",
    "            print >> fp, \"\"\n",
    "    print \"Done\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "WORD_SPLITTER = re.compile(r'[\\p{Punct}\\s]+')\n",
    "class DictionaryFeatures:\n",
    "    def __init__(self, dictDir):\n",
    "        self.word2dictionaries = {}\n",
    "        self.word2hashtagdictionaries = {}\n",
    "        self.dictionaries = []\n",
    "        i = 0\n",
    "        for d in os.listdir(dictDir):\n",
    "            print >> sys.stderr, \"read dict %s\"%d\n",
    "            self.dictionaries.append(d)\n",
    "            if d == '.svn':\n",
    "                continue\n",
    "            for line in open(dictDir + \"/\" + d):\n",
    "                word = line.rstrip('\\n')\n",
    "                word = word.strip(' ').lower()\n",
    "                word_hashtag = \"\".join(WORD_SPLITTER.split(word))\n",
    "                if not self.word2dictionaries.has_key(word):\n",
    "                    self.word2dictionaries[word] = str(i)\n",
    "                else:   \n",
    "                    self.word2dictionaries[word] += \"\\t%s\" % i\n",
    "                if not self.word2hashtagdictionaries.has_key(word_hashtag):\n",
    "                    self.word2hashtagdictionaries[word_hashtag] = str(i)\n",
    "                else:\n",
    "                    self.word2hashtagdictionaries[word_hashtag] += \"\\t%s\" % i\n",
    "            i += 1\n",
    "    \n",
    "    MAX_WINDOW_SIZE=6\n",
    "    def GetDictFeatures(self, words, i):\n",
    "        features = []\n",
    "        for window in range(1,self.MAX_WINDOW_SIZE):\n",
    "            start=max(i-window+1, 0)\n",
    "            end = start + window\n",
    "            phrase = ' '.join(words[start:end]).lower().strip(string.punctuation)\n",
    "            if self.word2dictionaries.has_key(phrase):\n",
    "                for j in self.word2dictionaries[phrase].split('\\t'):\n",
    "                    features.append('DICT=%s' % self.dictionaries[int(j)])\n",
    "                if window > 1:\n",
    "                    features.append('DICTWIN=%s' % window)\n",
    "        return list(set(features))\n",
    "    \n",
    "    def GetHashtagDictFeatures(self, word):\n",
    "        features = []\n",
    "        if len(word) < 2 or word[0] != \"#\":\n",
    "            return features\n",
    "        word = word[1:].lower().strip(string.punctuation)\n",
    "        if self.word2hashtagdictionaries.has_key(word):\n",
    "            for j in self.word2hashtagdictionaries[word].split('\\t'):\n",
    "                features.append('DICT_HASHTAG=%s' % self.dictionaries[int(j)])\n",
    "        return list(set(features))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "read dict time.holiday\n",
      "read dict location.country\n",
      "read dict award.award\n",
      "read dict location\n",
      "read dict movies.txt.results.txt\n",
      "read dict lastname.5000\n",
      "read dict sports.sports_team\n",
      "read dict tv.tv_program\n",
      "read dict book.newspaper\n",
      "read dict internet.website\n",
      "read dict base.events.festival_series\n",
      "read dict products.txt.results.txt\n",
      "read dict persons.txt.results.txt\n",
      "read dict tv.tv_network\n",
      "read dict cvg.computer_videogame\n",
      "read dict business.consumer_product\n",
      "read dict people.family_name\n",
      "read dict tvshows.txt.results.txt\n",
      "read dict government.government_agency\n",
      "read dict venues\n",
      "read dict broadcast.tv_channel\n",
      "read dict music_artists.txt.results.txt\n",
      "read dict automotive.make\n",
      "read dict product\n",
      "read dict business.consumer_company\n",
      "read dict music_artists.txt\n",
      "read dict venture_capital.venture_funded_company\n",
      "read dict cvg.cvg_developer\n",
      "read dict architecture.museum\n",
      "read dict lower.5000\n",
      "read dict automotive.model\n",
      "read dict time.recurring_event\n",
      "read dict cities.txt.results.txt\n",
      "read dict sports.sports_league\n",
      "read dict firstname.5k\n",
      "read dict business.brand\n",
      "read dict english.stop\n",
      "read dict all_geonames.txt\n",
      "read dict education.university\n",
      "read dict cvg.cvg_platform\n",
      "read dict sportsteams.txt.results.txt\n",
      "read dict cap.1000\n",
      "read dict business.sponsor\n",
      "read dict transportation.road\n"
     ]
    }
   ],
   "source": [
    "dict_features = DictionaryFeatures(\"./data/cleaned/custom_lexicons/\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def get_word_form(word, vocab=None, lower=False):\n",
    "    if lower:\n",
    "        word = word.lower()\n",
    "    if vocab:\n",
    "        vocab_search_word = word.lower() \n",
    "        word = \"OOV\" if vocab_search_word not in vocab else word\n",
    "    return word    \n",
    "\n",
    "def word2features(sent, widx, WORD_IDX=0, extra_features={},\n",
    "                  vocab=None, dict_features=None,\n",
    "                  vocab_presence_only=False,\n",
    "                  dict_interactions=False,\n",
    "                  interactions=False,\n",
    "                  lowercase=True,\n",
    "                  window=0,\n",
    "                 verbose=False, dropout=0.5):\n",
    "    word = sent[widx][WORD_IDX]\n",
    "    features = {\n",
    "        'bias': True,\n",
    "        'word_normed': word.lower(),\n",
    "        #'suffix_3': word[-3:].lower(),\n",
    "        #'suffix_2': word[-2:].lower(),\n",
    "        #'prefix_3': word[-3:].lower(),\n",
    "        #'prefix_2': word[-2:].lower(),\n",
    "    }\n",
    "    if not lowercase:\n",
    "        if np.random.rand() > dropout:\n",
    "            features[\"word_original\"] = word\n",
    "    curr_word_normed = get_word_form(word, lower=lowercase)\n",
    "    if widx > 0:\n",
    "        prev_word = get_word_form(sent[widx-1][WORD_IDX], lower=lowercase)\n",
    "        features[\"word[-1]\"] = prev_word\n",
    "        if interactions:\n",
    "            if np.random.rand() > dropout:\n",
    "                features[\"word[-1]=%s|word=%s\" % (prev_word, curr_word_normed)] = True\n",
    "    if widx < len(sent) -1:\n",
    "        next_word = get_word_form(sent[widx+1][WORD_IDX], lower=lowercase)\n",
    "        features[\"word[+1]\"] = next_word\n",
    "        if interactions:\n",
    "            if np.random.rand() > dropout:\n",
    "                features[\"word[+1]=%s|word=%s\" % (next_word, curr_word_normed)] = True\n",
    "    if vocab:\n",
    "        if vocab_presence_only:\n",
    "            features[\"word_normed\"] = word.lower() in vocab\n",
    "        else:\n",
    "            features[\"word_normed\"] = word.lower() if word.lower() in vocab else \"OOV\"\n",
    "    regex_features = RegexFeatures.process(word)\n",
    "    features.update(regex_features)\n",
    "    if dict_features:\n",
    "        d_features = dict_features.GetDictFeatures([k[WORD_IDX] for k in sent], widx)\n",
    "        features.update({k: True for k in d_features})\n",
    "        d_hashtag_features = dict_features.GetHashtagDictFeatures(word)\n",
    "        features.update({k: True for k in d_hashtag_features})\n",
    "    if window > 0:\n",
    "        for i in range(max(widx-window, 0), widx):\n",
    "            win_idx = i - widx\n",
    "            d_features_w = dict_features.GetDictFeatures([k[WORD_IDX] for k in sent], i)\n",
    "            if verbose and d_features_w:\n",
    "                print i, widx, win_idx, sent[i], d_features_w\n",
    "            features.update({\"window[%s]_%s\" % (win_idx, k): True for k in d_features_w})\n",
    "            if dict_interactions:\n",
    "                for kw in d_features:\n",
    "                    if np.random.rand() > dropout:\n",
    "                        features.update({\"window[%s]_%s|word_%s\" % (win_idx, k, kw): True for k in d_features_w})\n",
    "        for i in range(widx + 1, min(widx+window+1, len(sent))):\n",
    "            win_idx = i - widx\n",
    "            d_features_w = dict_features.GetDictFeatures([k[WORD_IDX] for k in sent], i)\n",
    "            if verbose and d_features_w:\n",
    "                print i, widx, win_idx, sent[i], d_features_w\n",
    "            features.update({\"window[%s]_%s\" % (win_idx, k): True for k in d_features_w})\n",
    "            if dict_interactions:\n",
    "                for kw in d_features:\n",
    "                    if np.random.rand() > dropout:\n",
    "                        features.update({\"window[%s]_%s|word_%s\" % (win_idx, k, kw): True for k in d_features_w})\n",
    "    features.update(extra_features)\n",
    "    if widx == 0:\n",
    "        features['__BOS__'] = True\n",
    "    if widx == len(sent)-1:\n",
    "        features['__EOS__'] = True\n",
    "    return features\n",
    "\n",
    "def sent2features(sent, extra_features=None, **kwargs):\n",
    "    if extra_features:\n",
    "        return [word2features(sent, i, extra_features=extra_features[i],\n",
    "                              **kwargs) for i in range(len(sent))]\n",
    "    return [word2features(sent, i, **kwargs) for i in range(len(sent))]\n",
    "\n",
    "def sent2labels(sent, lbl_id=1):\n",
    "    return [k[lbl_id] for k in sent]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8023\n"
     ]
    }
   ],
   "source": [
    "train_sequences = load_sequences(\"data/cleaned/train.BIEOU.tsv\", sep=\"\\t\", notypes=False)\n",
    "dev_sequences = (load_sequences(\"data/cleaned/dev.BIEOU.tsv\", sep=\"\\t\", notypes=False) \n",
    "                 + load_sequences(\"data/cleaned/dev_2015.BIEOU.tsv\", sep=\"\\t\", notypes=False))\n",
    "\n",
    "vocab = load_vocab(\"vocab.no_extras.txt\")\n",
    "print len(vocab)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11970 11970 1420 1420\n",
      "CPU times: user 34 s, sys: 752 ms, total: 34.7 s\n",
      "Wall time: 34.7 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "upsampled_training_data = train_sequences*5\n",
    "X_train = [sent2features(s, vocab=None,\n",
    "                         dict_features=dict_features, vocab_presence_only=False,\n",
    "                         window=2, interactions=True, dict_interactions=False, lowercase=False, dropout=0.5)\n",
    "           for s in upsampled_training_data]\n",
    "y_train = [sent2labels(s) for s in upsampled_training_data]\n",
    "\n",
    "X_test = [sent2features(s, vocab=None,\n",
    "                        dict_features=dict_features, vocab_presence_only=False,\n",
    "                        window=2, interactions=True, dict_interactions=False, lowercase=False, dropout=0)\n",
    "          for s in dev_sequences]\n",
    "y_test = [sent2labels(s) for s in dev_sequences]\n",
    "print len(X_train), len(y_train), len(X_test), len(y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 4min 20s, sys: 392 ms, total: 4min 20s\n",
      "Wall time: 4min 20s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "crf = sklearn_crfsuite.CRF(\n",
    "    algorithm='l2sgd', \n",
    "    c2=1e-3,\n",
    "    #max_iterations=100,\n",
    "    #calibration_samples=20,\n",
    "    #all_possible_transitions=True,\n",
    "    #all_possible_states=True\n",
    ")\n",
    "crf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['U-geo-loc',\n",
       " 'B-facility',\n",
       " 'E-facility',\n",
       " 'B-movie',\n",
       " 'E-movie',\n",
       " 'U-company',\n",
       " 'U-product',\n",
       " 'U-person',\n",
       " 'B-other',\n",
       " 'E-other',\n",
       " 'B-sportsteam',\n",
       " 'E-sportsteam',\n",
       " 'I-other',\n",
       " 'B-product',\n",
       " 'I-product',\n",
       " 'E-product',\n",
       " 'B-company',\n",
       " 'E-company',\n",
       " 'B-person',\n",
       " 'E-person',\n",
       " 'B-geo-loc',\n",
       " 'E-geo-loc',\n",
       " 'U-other',\n",
       " 'I-facility',\n",
       " 'U-sportsteam',\n",
       " 'U-tvshow',\n",
       " 'B-musicartist',\n",
       " 'E-musicartist',\n",
       " 'U-facility',\n",
       " 'I-musicartist',\n",
       " 'B-tvshow',\n",
       " 'E-tvshow',\n",
       " 'I-person',\n",
       " 'U-musicartist',\n",
       " 'I-geo-loc',\n",
       " 'I-company',\n",
       " 'I-movie',\n",
       " 'U-movie',\n",
       " 'I-tvshow',\n",
       " 'I-sportsteam']"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels = list(crf.classes_)\n",
    "labels.remove('O')\n",
    "labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training accuracy:  0.996547492717\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>class</th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "      <th>f1-score</th>\n",
       "      <th>support</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>B-company</td>\n",
       "      <td>0.993</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.996</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>E-company</td>\n",
       "      <td>0.993</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.996</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>I-company</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>U-company</td>\n",
       "      <td>0.990</td>\n",
       "      <td>0.997</td>\n",
       "      <td>0.994</td>\n",
       "      <td>720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>B-facility</td>\n",
       "      <td>0.997</td>\n",
       "      <td>0.992</td>\n",
       "      <td>0.995</td>\n",
       "      <td>395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>E-facility</td>\n",
       "      <td>0.997</td>\n",
       "      <td>0.992</td>\n",
       "      <td>0.995</td>\n",
       "      <td>390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>I-facility</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>U-facility</td>\n",
       "      <td>0.985</td>\n",
       "      <td>0.992</td>\n",
       "      <td>0.989</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>B-geo-loc</td>\n",
       "      <td>0.987</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.993</td>\n",
       "      <td>225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>E-geo-loc</td>\n",
       "      <td>0.985</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.993</td>\n",
       "      <td>200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>I-geo-loc</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>U-geo-loc</td>\n",
       "      <td>0.999</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>B-movie</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>E-movie</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>I-movie</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>U-movie</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>B-musicartist</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>E-musicartist</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>I-musicartist</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>U-musicartist</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>B-other</td>\n",
       "      <td>0.999</td>\n",
       "      <td>0.991</td>\n",
       "      <td>0.995</td>\n",
       "      <td>785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>E-other</td>\n",
       "      <td>0.999</td>\n",
       "      <td>0.991</td>\n",
       "      <td>0.995</td>\n",
       "      <td>780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>I-other</td>\n",
       "      <td>0.999</td>\n",
       "      <td>0.991</td>\n",
       "      <td>0.995</td>\n",
       "      <td>820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>U-other</td>\n",
       "      <td>0.979</td>\n",
       "      <td>0.974</td>\n",
       "      <td>0.976</td>\n",
       "      <td>340</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>B-person</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>E-person</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>I-person</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>U-person</td>\n",
       "      <td>0.998</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.999</td>\n",
       "      <td>1250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>B-product</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>245</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>E-product</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>I-product</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>155</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>U-product</td>\n",
       "      <td>0.992</td>\n",
       "      <td>0.988</td>\n",
       "      <td>0.990</td>\n",
       "      <td>245</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>B-sportsteam</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>E-sportsteam</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>I-sportsteam</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>U-sportsteam</td>\n",
       "      <td>0.993</td>\n",
       "      <td>0.986</td>\n",
       "      <td>0.990</td>\n",
       "      <td>145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>B-tvshow</td>\n",
       "      <td>0.991</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.995</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>E-tvshow</td>\n",
       "      <td>0.991</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.995</td>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>I-tvshow</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>U-tvshow</td>\n",
       "      <td>0.952</td>\n",
       "      <td>1.000</td>\n",
       "      <td>0.976</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>avg/total</td>\n",
       "      <td>0.997</td>\n",
       "      <td>0.996</td>\n",
       "      <td>0.997</td>\n",
       "      <td>12310</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            class precision recall f1-score support\n",
       "0       B-company     0.993  1.000    0.996     135\n",
       "1       E-company     0.993  1.000    0.996     135\n",
       "2       I-company     1.000  1.000    1.000      45\n",
       "3       U-company     0.990  0.997    0.994     720\n",
       "4      B-facility     0.997  0.992    0.995     395\n",
       "5      E-facility     0.997  0.992    0.995     390\n",
       "6      I-facility     1.000  1.000    1.000     130\n",
       "7      U-facility     0.985  0.992    0.989     130\n",
       "8       B-geo-loc     0.987  1.000    0.993     225\n",
       "9       E-geo-loc     0.985  1.000    0.993     200\n",
       "10      I-geo-loc     1.000  1.000    1.000      40\n",
       "11      U-geo-loc     0.999  1.000    1.000    1160\n",
       "12        B-movie     1.000  1.000    1.000     145\n",
       "13        E-movie     1.000  1.000    1.000     145\n",
       "14        I-movie     1.000  1.000    1.000      85\n",
       "15        U-movie     1.000  1.000    1.000      25\n",
       "16  B-musicartist     1.000  1.000    1.000     185\n",
       "17  E-musicartist     1.000  1.000    1.000     185\n",
       "18  I-musicartist     1.000  1.000    1.000     120\n",
       "19  U-musicartist     1.000  1.000    1.000      90\n",
       "20        B-other     0.999  0.991    0.995     785\n",
       "21        E-other     0.999  0.991    0.995     780\n",
       "22        I-other     0.999  0.991    0.995     820\n",
       "23        U-other     0.979  0.974    0.976     340\n",
       "24       B-person     1.000  1.000    1.000     995\n",
       "25       E-person     1.000  1.000    1.000     985\n",
       "26       I-person     1.000  1.000    1.000      90\n",
       "27       U-person     0.998  1.000    0.999    1250\n",
       "28      B-product     1.000  1.000    1.000     245\n",
       "29      E-product     1.000  1.000    1.000     240\n",
       "30      I-product     1.000  1.000    1.000     155\n",
       "31      U-product     0.992  0.988    0.990     245\n",
       "32   B-sportsteam     1.000  1.000    1.000     110\n",
       "33   E-sportsteam     1.000  1.000    1.000     105\n",
       "34   I-sportsteam     1.000  1.000    1.000      10\n",
       "35   U-sportsteam     0.993  0.986    0.990     145\n",
       "36       B-tvshow     0.991  1.000    0.995     110\n",
       "37       E-tvshow     0.991  1.000    0.995     110\n",
       "38       I-tvshow     1.000  1.000    1.000      45\n",
       "39       U-tvshow     0.952  1.000    0.976      60\n",
       "40      avg/total     0.997  0.996    0.997   12310"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# group B and I results\n",
    "sorted_labels = sorted(\n",
    "    labels, \n",
    "    key=lambda name: (name[1:], name[0])\n",
    ")\n",
    "\n",
    "y_pred = crf.predict(X_train)\n",
    "print \"Training accuracy: \", metrics.flat_f1_score(y_train, y_pred, \n",
    "                      average='weighted', labels=labels)\n",
    "\n",
    "report = metrics.flat_classification_report(\n",
    "    y_train, y_pred, labels=sorted_labels, digits=3\n",
    ")\n",
    "display(classification_report_to_df(report))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dev accuracy:  0.285857656202\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>class</th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "      <th>f1-score</th>\n",
       "      <th>support</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>B-company</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>E-company</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>I-company</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>U-company</td>\n",
       "      <td>0.519</td>\n",
       "      <td>0.311</td>\n",
       "      <td>0.389</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>B-facility</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.536</td>\n",
       "      <td>0.517</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>E-facility</td>\n",
       "      <td>0.414</td>\n",
       "      <td>0.444</td>\n",
       "      <td>0.429</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>I-facility</td>\n",
       "      <td>0.333</td>\n",
       "      <td>0.294</td>\n",
       "      <td>0.312</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>U-facility</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>B-geo-loc</td>\n",
       "      <td>0.400</td>\n",
       "      <td>0.341</td>\n",
       "      <td>0.368</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>E-geo-loc</td>\n",
       "      <td>0.531</td>\n",
       "      <td>0.472</td>\n",
       "      <td>0.500</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>I-geo-loc</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.045</td>\n",
       "      <td>0.083</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>U-geo-loc</td>\n",
       "      <td>0.490</td>\n",
       "      <td>0.603</td>\n",
       "      <td>0.541</td>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>B-movie</td>\n",
       "      <td>0.167</td>\n",
       "      <td>0.083</td>\n",
       "      <td>0.111</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>E-movie</td>\n",
       "      <td>0.167</td>\n",
       "      <td>0.083</td>\n",
       "      <td>0.111</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>I-movie</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>U-movie</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>B-musicartist</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>E-musicartist</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>I-musicartist</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>U-musicartist</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>B-other</td>\n",
       "      <td>0.156</td>\n",
       "      <td>0.156</td>\n",
       "      <td>0.156</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>E-other</td>\n",
       "      <td>0.182</td>\n",
       "      <td>0.184</td>\n",
       "      <td>0.183</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>I-other</td>\n",
       "      <td>0.098</td>\n",
       "      <td>0.154</td>\n",
       "      <td>0.120</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>U-other</td>\n",
       "      <td>0.571</td>\n",
       "      <td>0.235</td>\n",
       "      <td>0.333</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>B-person</td>\n",
       "      <td>0.570</td>\n",
       "      <td>0.756</td>\n",
       "      <td>0.650</td>\n",
       "      <td>119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>E-person</td>\n",
       "      <td>0.553</td>\n",
       "      <td>0.739</td>\n",
       "      <td>0.633</td>\n",
       "      <td>119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>I-person</td>\n",
       "      <td>0.222</td>\n",
       "      <td>0.125</td>\n",
       "      <td>0.160</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>U-person</td>\n",
       "      <td>0.494</td>\n",
       "      <td>0.352</td>\n",
       "      <td>0.411</td>\n",
       "      <td>125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>B-product</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>E-product</td>\n",
       "      <td>0.071</td>\n",
       "      <td>0.031</td>\n",
       "      <td>0.043</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>I-product</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>U-product</td>\n",
       "      <td>0.429</td>\n",
       "      <td>0.214</td>\n",
       "      <td>0.286</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>B-sportsteam</td>\n",
       "      <td>0.214</td>\n",
       "      <td>0.150</td>\n",
       "      <td>0.176</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>E-sportsteam</td>\n",
       "      <td>0.214</td>\n",
       "      <td>0.158</td>\n",
       "      <td>0.182</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>I-sportsteam</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>U-sportsteam</td>\n",
       "      <td>0.833</td>\n",
       "      <td>0.059</td>\n",
       "      <td>0.110</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>B-tvshow</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>E-tvshow</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>I-tvshow</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>U-tvshow</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>avg/total</td>\n",
       "      <td>0.345</td>\n",
       "      <td>0.288</td>\n",
       "      <td>0.286</td>\n",
       "      <td>1567</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            class precision recall f1-score support\n",
       "0       B-company     0.000  0.000    0.000      27\n",
       "1       E-company     0.000  0.000    0.000      27\n",
       "2       I-company     0.000  0.000    0.000      14\n",
       "3       U-company     0.519  0.311    0.389      45\n",
       "4      B-facility     0.500  0.536    0.517      28\n",
       "5      E-facility     0.414  0.444    0.429      27\n",
       "6      I-facility     0.333  0.294    0.312      17\n",
       "7      U-facility     0.000  0.000    0.000      18\n",
       "8       B-geo-loc     0.400  0.341    0.368      41\n",
       "9       E-geo-loc     0.531  0.472    0.500      36\n",
       "10      I-geo-loc     0.500  0.045    0.083      22\n",
       "11      U-geo-loc     0.490  0.603    0.541     121\n",
       "12        B-movie     0.167  0.083    0.111      12\n",
       "13        E-movie     0.167  0.083    0.111      12\n",
       "14        I-movie     0.000  0.000    0.000       5\n",
       "15        U-movie     0.000  0.000    0.000       6\n",
       "16  B-musicartist     0.000  0.000    0.000      34\n",
       "17  E-musicartist     0.000  0.000    0.000      30\n",
       "18  I-musicartist     0.000  0.000    0.000      11\n",
       "19  U-musicartist     0.000  0.000    0.000      23\n",
       "20        B-other     0.156  0.156    0.156      77\n",
       "21        E-other     0.182  0.184    0.183      76\n",
       "22        I-other     0.098  0.154    0.120      65\n",
       "23        U-other     0.571  0.235    0.333     102\n",
       "24       B-person     0.570  0.756    0.650     119\n",
       "25       E-person     0.553  0.739    0.633     119\n",
       "26       I-person     0.222  0.125    0.160      16\n",
       "27       U-person     0.494  0.352    0.411     125\n",
       "28      B-product     0.000  0.000    0.000      32\n",
       "29      E-product     0.071  0.031    0.043      32\n",
       "30      I-product     0.000  0.000    0.000      95\n",
       "31      U-product     0.429  0.214    0.286      14\n",
       "32   B-sportsteam     0.214  0.150    0.176      20\n",
       "33   E-sportsteam     0.214  0.158    0.182      19\n",
       "34   I-sportsteam     0.000  0.000    0.000       5\n",
       "35   U-sportsteam     0.833  0.059    0.110      85\n",
       "36       B-tvshow     0.000  0.000    0.000       2\n",
       "37       E-tvshow     0.000  0.000    0.000       2\n",
       "38       I-tvshow     0.000  0.000    0.000       0\n",
       "39       U-tvshow     0.000  0.000    0.000       6\n",
       "40      avg/total     0.345  0.288    0.286    1567"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_pred = crf.predict(X_test)\n",
    "print \"Dev accuracy: \", metrics.flat_f1_score(y_test, y_pred, \n",
    "                      average='weighted', labels=labels)\n",
    "\n",
    "report = metrics.flat_classification_report(\n",
    "    y_test, y_pred, labels=sorted_labels, digits=3\n",
    ")\n",
    "display(classification_report_to_df(report))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top likely transitions:\n",
      "I-other -> E-other 9.738545\n",
      "I-other -> I-other 9.497695\n",
      "O      -> O       9.430610\n",
      "B-other -> I-other 9.369440\n",
      "B-person -> E-person 8.844218\n",
      "B-facility -> E-facility 8.654766\n",
      "B-other -> E-other 8.422605\n",
      "B-musicartist -> E-musicartist 8.145564\n",
      "I-facility -> E-facility 8.123712\n",
      "B-product -> E-product 7.923859\n",
      "B-company -> E-company 7.788056\n",
      "B-facility -> I-facility 7.614000\n",
      "B-musicartist -> I-musicartist 6.875702\n",
      "I-musicartist -> E-musicartist 6.797822\n",
      "B-sportsteam -> E-sportsteam 6.692585\n",
      "I-person -> E-person 6.679926\n",
      "B-movie -> I-movie 6.596718\n",
      "I-movie -> E-movie 6.574521\n",
      "B-product -> I-product 6.564891\n",
      "I-product -> E-product 6.553286\n",
      "B-geo-loc -> E-geo-loc 6.476547\n",
      "B-tvshow -> E-tvshow 6.235243\n",
      "B-movie -> E-movie 6.128637\n",
      "I-product -> I-product 5.946696\n",
      "O      -> U-person 5.879367\n"
     ]
    }
   ],
   "source": [
    "print(\"Top likely transitions:\")\n",
    "print_transitions(Counter(crf.transition_features_).most_common(25))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top positive:\n",
      "8.024072 U-person word_normed:pope\n",
      "8.011719 U-other  word_normed:xmas\n",
      "6.974464 U-facility word[-1]:at\n",
      "6.962679 U-geo-loc DICT=location.country\n",
      "6.417864 O        __BOS__\n",
      "6.370821 U-person word_normed:ellwood\n",
      "6.179657 U-person word_normed:jfk\n",
      "6.127221 O        __EOS__\n",
      "6.067341 U-other  word_normed:treasury\n",
      "6.052094 U-person word_normed:pedersen\n",
      "6.037460 U-facility word_normed:lhs\n",
      "6.034076 U-other  DICT=sports.sports_league\n",
      "5.942980 U-company word_normed:walmart\n",
      "5.899255 U-person word_normed:beyonce\n",
      "5.771144 U-other  word_normed:above&amp;beyond\n",
      "5.712115 U-geo-loc word_normed:uk\n",
      "5.534734 U-geo-loc word_normed:america\n",
      "5.497369 U-company word_normed:target\n",
      "5.465974 U-company word_normed:yahoo\n",
      "5.436219 U-person word_normed:o.d.b.\n",
      "5.360700 U-company word_normed:twitter\n",
      "5.346324 U-other  word_normed:dems\n",
      "5.335369 O        word_normed:september\n",
      "5.261979 O        word_normed:saturday\n",
      "5.240760 U-other  word_normed:a&amp;e\n",
      "5.223121 U-geo-loc word_normed:alderwood\n",
      "5.130850 U-company DICT=venture_capital.venture_funded_company\n",
      "5.060980 U-person word_normed:lohan\n",
      "5.001131 O        DICT=lower.5000\n",
      "4.933607 U-person word_normed:god\n",
      "4.930058 U-company word_normed:lush\n",
      "4.900996 O        DICT=english.stop\n",
      "4.774334 O        isMention\n",
      "4.721084 U-tvshow word_normed:#bb11\n",
      "4.718761 U-company word_normed:mcdonalds\n",
      "4.714577 U-product word[+1]:manual\n",
      "4.714577 U-product word_normed:git\n",
      "4.695729 B-facility word[-1]:at\n",
      "4.690123 U-geo-loc word_normed:mv\n",
      "4.673505 U-other  word_normed:vmas\n",
      "4.619235 U-other  word_normed:guitarnews\n",
      "4.574502 U-person word[-1]:sang\n",
      "4.574502 U-person word_normed:meatloaf\n",
      "4.521698 U-other  word_normed:unsung\n",
      "4.462258 U-other  word_normed:yakuza\n",
      "4.441721 U-product word_normed:macdonalds\n",
      "4.411144 U-geo-loc word_normed:jupiter\n",
      "4.403115 U-product word_normed:kahlua\n",
      "4.398242 U-geo-loc word_normed:aintree\n",
      "4.398242 U-geo-loc word[-1]:bbt\n",
      "4.394090 O        word_normed:sun\n",
      "4.374520 U-tvshow word[-1]:)\n",
      "4.354806 U-person word_normed:4dbling\n",
      "4.352046 U-other  DICT=time.holiday\n",
      "4.350074 O        word_normed:ha\n",
      "4.349090 U-company word_normed:wipro\n",
      "4.341588 O        word_normed:islip\n",
      "4.315394 U-other  word_normed:dynamite\n",
      "4.295747 U-product DICT=product\n",
      "4.285006 U-company word[-1]:eastern\n",
      "4.285006 U-company word[+1]:211\n",
      "4.285006 U-company word_normed:sirius\n",
      "4.241244 U-product word_normed:m&amp;m\n",
      "4.240052 U-person word_normed:bb\n",
      "4.220610 O        word_normed:august\n",
      "4.212875 U-geo-loc word_normed:taorminaa\n",
      "4.211067 U-other  word_normed:christmas\n",
      "4.209030 U-sportsteam word[-1]:?\n",
      "4.172338 O        repeatedPunctuation\n",
      "4.160685 U-person DICT=firstname.5k\n",
      "4.142380 U-company word_normed:ione\n",
      "4.141536 O        word_normed:friday\n",
      "4.108821 U-person word[-1]:17-9-2010Tal\n",
      "4.108821 U-person word_normed:al-mallohi\n",
      "4.107502 U-company word_normed:delphi\n",
      "4.107502 U-company word[-1]:bij\n",
      "4.100266 U-company DICT=business.sponsor\n",
      "4.083139 U-other  word_normed:motogp\n",
      "4.078406 U-facility window[-2]_DICTWIN=3\n",
      "4.075604 U-geo-loc word_normed:rimutakas\n",
      "4.073440 O        word_normed:monday\n",
      "4.067923 U-person word[+1]:tellin\n",
      "4.067923 U-person word_normed:wingo\n",
      "4.038998 O        word_normed:day\n",
      "4.038690 U-company word_normed:ufc\n",
      "4.034403 U-company word_normed:tmz\n",
      "3.992268 U-product word_normed:dabigatran\n",
      "3.991244 U-geo-loc isAllCapitalWord\n",
      "3.962651 U-company word_normed:fb\n",
      "3.961988 U-other  word[-1]:configuring\n",
      "3.961988 U-other  word_normed:ibgp\n",
      "3.930141 U-sportsteam word[+1]:football\n",
      "3.928666 U-person word_normed:billy\n",
      "3.928666 U-person word[-1]:Silly\n",
      "3.928142 U-product word_normed:tomatoes\n",
      "3.928142 U-product word[-1]:Ripe\n",
      "3.922622 U-person word_normed:mj\n",
      "3.902232 U-product word_normed:windows\n",
      "3.899534 U-product word[-1]:purchase\n",
      "3.888656 U-geo-loc DICT=location\n",
      "\n",
      "Top negative:\n",
      "-3.232169 O        word[+1]:football\n",
      "-3.423661 U-geo-loc DICT=product\n",
      "-3.499049 O        word[+1]:says\n",
      "-3.571067 O        word[-1]:then\n",
      "-3.631992 O        word[-1]:discovered\n",
      "-3.874311 O        word[-1]:purchase\n",
      "-4.161778 O        word[-1]:--\n",
      "-4.290592 U-person DICT=cvg.computer_videogame\n",
      "-4.313057 O        word[-1]:hate\n",
      "-4.880560 O        word_normed:lush\n"
     ]
    }
   ],
   "source": [
    "print(\"Top positive:\")\n",
    "print_state_features(Counter(crf.state_features_).most_common(100))\n",
    "\n",
    "print(\"\\nTop negative:\")\n",
    "print_state_features(Counter(crf.state_features_).most_common()[-10:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(41, 41)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8AAAAOQCAYAAAD2WBhsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVnX+///HAQREFlFEzG2sTFLDtZm6qQMiyqajMpbj\nIMyYbaY3M6lMP6XjkkspajaTkzaR6PixcsmFPXc0GZdSK+fbopaa5LCICYjA9fvDn9dHRlCRo3Bx\nPe+3G7fbdZ3zPq/zOge49MV7OYbFYrEgIiIiIiIiUs851HYCIiIiIiIiIneDCmARERERERGxCyqA\nRURERERExC6oABYRERERERG7oAJYRERERERE7IIKYBEREREREbELKoBFRERERESk1pWWljJ37lz8\n/f3Jzs62bp8/fz5hYWFEREQQHx9v3f7TTz/xxBNPEBoaSlRUFPv27bvpOVQAi4iIiIiISK177rnn\ncHd3xzAM67YtW7awf/9+Nm/ezCeffEJWVhZpaWkAvPbaa/Tt25fU1FRmz55NXFwcJSUlNzyHCmAR\nERERERGpdWPHjmXcuHFYLBbrttTUVIYOHYqTkxMNGjTgd7/7HSkpKfzyyy989tlnPPbYYwD4+/tz\nzz333LQXWAWwiIiIiIiI1LouXbpct+348eO0adPG+r5NmzZ8//33nDx5kqZNm+Lq6mrd17p1a77/\n/vsbnsPJvHRFRERERETEnkRFRVW6fd26dabELy4uxtnZ2fre1dWVoqIiioqKcHFxqdDWxcWFoqKi\nG8ZTAVxPXTtuXv6Pm5tbjWMUFhaakEnd0axZM1PinDt3zpQ4IrZm2LBhpsT5+OOPTYlTV7Rr167G\nMY4fP25CJnWL/h0SqZnFixebEmf8+PGmxJE7r2HDhhXm9RYVFeHm5oabmxvFxcUV2hYXF9/0c1YF\nsIiIiIiIiNwWs3p6/9vVDr17772XkydP8uijjwJw8uRJ7rvvPtq0aUNeXh5FRUU0bNgQgBMnTtz0\nD9OaAywiIiIiIiJ1ytWFsMLDw/nwww8pKiri4sWLrFmzhkGDBuHu7k6vXr1ITEwE4LPPPiMnJ4eH\nH374hnHVAywiIiIiIiK1Kicnh5EjRwJXen9jY2NxdHQkISGBPn36MGTIEAzDYNCgQQQGBgIwffp0\nJk2axMcff4y7uztvvfUWDRo0uOF5VACLiIiIiIhIrWratCnJycmV7nvhhRd44YUXrtvevHlzEhIS\nqnUemymA/f39adu2LY6OjpSXl9OmTRumTp1Kq1atajs1ERERERERsQE2MwfYMAwSExNJSkoiJSUF\nf39/Zs2aVdtpiYiIiIiIiI2wmR5gi8VinQgN8Mgjj7Bt27Yq27/77rt8+OGHODk5ERQUxCuvvALA\nihUrWLNmDRaLhXbt2jFr1iy8vb2ZPHkyvr6+HDp0iG+//ZbHHnuMVq1asWLFCgoLC1m8eDGdO3cm\nJiaG3/zmN+zatYvTp08THBzM9OnTMQyDTz/9lEWLFnH58mUaNWrE66+/jr+/P1lZWcTHx/PrX/+a\njIwMSkpKmDt3Lo0bNyY6OprMzEycnK58K8aPH0/Pnj2JjY29szdURERERERswrV1UF1ja49ftZke\n4GuVlJSwceNGgoODK91/4MAB1q5dy6ZNm9i0aRMHDx4kNTWVL774gvfff5+VK1eSlJREixYtiI+P\ntx63a9culi1bxgcffMDy5cvJy8tj06ZNDBgwwLq62NV2iYmJZGRkkJWVxbZt2ygrK2PKlCm8/vrr\npKSkEBwczBtvvGE95quvvqJbt24kJSUxYsQI3nnnHe6//378/PzYtWuX9boyMzOJiIi4Q3dORERE\nRETEftlMDzBAbGwsDg4O5OTk4Ovry5gxYyptt3PnToKCgqzPg0pMTKRBgwYsWbKE0NBQvL29ARg2\nbBjPPfec9bhevXrh4uJC+/btKS8vp1+/fgB06NCBTz75xNouIiICZ2dnAPr06cOhQ4cIDg5mz549\nODo6AtCjRw82bNhgPcbd3Z2+ffsC0LFjRz7++GMAIiMj2bx5M3379mX37t107NgRHx+fW74nUVFR\nt9xWRERERETEntlUAZyYmIivry8A+/fvJzo6mg0bNpCamsrKlSsxDIOJEyeSl5dnbQfg4uICQG5u\nLs2bN7du9/LyIicnx/q+UaNG1tcODg7WAtrBwYGysrIKx137+ueffwbggw8+YMOGDVy+fJlLly5V\nGA7g4eFhfX11IS+4UkwvXbqU4uJiMjIy1PsrIiIiIiJyh9hUAXzt2PeePXvSsmVLDhw4QHR0NNHR\n0dZ9R44cIT8/3/r+6msfH58K2/Py8mjatGm18/jv2I0bN+bQoUMsX76ctWvX0qJFC/bs2cNrr712\n01itWrXigQceID09nR07dvDiiy9WK5d169ZVut3WxuKLiIiIiIjcaTY5Bxjg+PHjnDhxgnvvvfe6\nfcHBwWzdupULFy5QWlrK2LFjyczMJDAwkPT0dM6fPw/AmjVrrMOSqyM9PZ2SkhIKCwvZtWsXPXr0\nICcnh6ZNm+Ln50dRURHr16+nqKjoluINHDiQhQsX0qFDB5o0aVLtfEREREREROTmbKYH2DAMYmNj\ncXR0xGKx4OLiwowZM2jfvv11bbt06cLo0aMZPHgwzs7OBAYGEhkZCcBTTz3FH//4RywWCw8++CB/\n+ctfqjxfVbp160ZsbCw//PAD/fv3JzAwkJKSElavXk1ISAh+fn5MmTKFw4cPM378eEaOHHnDawsP\nD2fOnDkV5iOLiIiIiIiAVoE2k2Gpy3ezDoqJieHxxx9n0KBBpsUsKSmhX79+bNmyBU9PT1Ni2toP\n4t3i5uZW4xiFhYUmZFJ3NGvWzJQ4586dMyWOiK0ZNmyYKXGuLo5YX7Rr167GMY4fP25CJnWL/h0S\nqZnFixebEmf8+PGmxLlbrq4fVBc5ONjWoGLbyraeSkhIICgoyLTiV0RERERERK5nM0Og6wqze1bD\nw8Px8fFhyZIlpsYVERERERGRilQAV9OKFStMjZecnGxqPBEREREREamchkCLiIiIiIiIXVAPsIiI\niIiISB2mdYvNowJY7IoZK2fWtxU86+PqzfXte1Tfrqe+MWv15s6dO9c4xsWLF03IxJzVl82IYcZK\n0mBOLmb8HkLd+XcI6t/ngj4r7UN9/H+L3F0aAi0iIiIiIiJ2QQWwiIiIiIiI2AUVwCIiIiIiImIX\nbGYOsL+/P23btsXR0RG4MhHcMAzmzZvHQw89VMvZiYiIiIiISF1nMwWwYRgkJibi6+tb26mIiIiI\niIjcNVoF2jw2UwBbLJZqfePfffddPvzwQ5ycnAgKCuKVV14BYMWKFaxZswaLxUK7du2YNWsW3t7e\nTJ48GV9fXw4dOsS3337LY489RqtWrVixYgWFhYUsXryYzp07ExMTw29+8xt27drF6dOnCQ4OZvr0\n6RiGwaeffsqiRYu4fPkyjRo14vXXX8ff35+srCzi4+P59a9/TUZGBiUlJcydO5fGjRsTHR1NZmYm\nTk5XvhXjx4+nZ8+exMbG3pH7KCIiIiIiYq/q5RzgAwcOsHbtWjZt2sSmTZs4ePAgqampfPHFF7z/\n/vusXLmSpKQkWrRoQXx8vPW4Xbt2sWzZMj744AOWL19OXl4emzZtYsCAASQmJlZol5iYSEZGBllZ\nWWzbto2ysjKmTJnC66+/TkpKCsHBwbzxxhvWY7766iu6detGUlISI0aM4J133uH+++/Hz8+PXbt2\nAVBSUkJmZiYRERF372aJiIiIiIjYCZvpAQaIjY2tMAe4adOmrFy58rp2O3fuJCgoiIYNGwKQmJhI\ngwYNWLJkCaGhoXh7ewMwbNgwnnvuOetxvXr1wsXFhfbt21NeXk6/fv0A6NChA5988om1XUREBM7O\nzgD06dOHQ4cOERwczJ49e6z59ejRgw0bNliPcXd3p2/fvgB07NjR+tzIyMhINm/eTN++fdm9ezcd\nO3bEx8fnlu9JVFTULbcVERERERGxZzZVAFc1B3jVqlWsXLkSwzCYOHEieXl5Fdq5uLgAkJubS/Pm\nza3bvby8yMnJsb5v1KiR9bWDg4O1gHZwcKCsrKzCcde+/vnnnwH44IMP2LBhA5cvX+bSpUsYhmFt\n5+HhYX3t6OhIeXk5cKWYXrp0KcXFxWRkZKj3V0RERERE5A6xqQK4qjnA0dHRREdHW98fOXKE/Px8\n6/urr318fCpsz8vLo2nTptXO479jN27cmEOHDrF8+XLWrl1LixYt2LNnD6+99tpNY7Vq1YoHHniA\n9PR0duzYwYsvvlitXNatW1fp9muLbxEREREREamnc4CDg4PZunUrFy5coLS0lLFjx5KZmUlgYCDp\n6emcP38egDVr1liHJVdHeno6JSUlFBYWsmvXLnr06EFOTg5NmzbFz8+PoqIi1q9fT1FR0S3FGzhw\nIAsXLqRDhw40adKk2vmIiIiIiEj9dXVB4Lr4ZWtspgfYMIzr5gAbhnFd7y9Aly5dGD16NIMHD8bZ\n2ZnAwEAiIyMBeOqpp/jjH/+IxWLhwQcf5C9/+UuV56tKt27diI2N5YcffqB///4EBgZSUlLC6tWr\nCQkJwc/PjylTpnD48GHGjx/PyJEjb3ht4eHhzJkzp8J8ZBERERERETGXYbHFsr0WxcTE8PjjjzNo\n0CDTYpaUlNCvXz+2bNmCp6enKTE1BPrOcXNzq3GMwsJCEzKRqtS371F9ux6pXOfOnWsc4+LFiyZk\nAsePHzclTk21a9fOlDhmXI8Zv4dgzu9iXcqlLtFnpX149dVXTYkzc+ZMU+LcLZcvX67tFKrUoEGD\n2k6hWurlEGhbk5CQQFBQkGnFr4iIiIiIiFzPZoZA1xVm96yGh4fj4+PDkiVLTI0rIiIiIiIiFakA\nrqYVK1aYGi85OdnUeCIiIiIiIlI5DYEWERERERERu6AeYBERERERkTpM6xabRwWwSDWZsUJks2bN\nTMgEzp07Z0ocM5h1TWYw476YcT1mfX+0Kql9OHr0aI1jdOrUyYRM6o66sho11K3fw7qUixnq47+J\ncue0bNmytlMQG6ch0CIiIiIiImIXVACLiIiIiIiIXVABLCIiIiIiInbBZgvg4OBgDh48WNtpiIiI\niIiIiI3QIlgiIiIiIiJ1mFaBNo/N9gBX5ejRo0RFRREWFkZMTAynTp0C4NixY4wYMYLw8HCGDh3K\n7t27AcjKyuIPf/gDs2fPJiQkhGHDhnH48GFiY2Pp3bs3b7/9NgDr16/n6aef5uWXX6Z///4MGjSI\nH374AYCcnByefPJJwsPDCQkJISEhwZpPcHAwa9as4bHHHqNPnz7MmzcPgGHDhpGWlmZtt337doYM\nGXI3bpGIiIiIiIhdqncFcFxcHBMnTiQlJYWQkBBmzZqFxWIhLi6OmJgYkpOTmTlzJnFxcdbHCHz5\n5ZcMGDCAjIwMDMNg5syZLF++nPfff5+lS5dSUlICwJ49exg5ciTp6en069ePN998E4B33nmHNm3a\nkJyczPvvv8+CBQvIzs625rR//34++ugj1q5dS2JiItnZ2QwcOJBNmzZZ26SnpxMZGXkX75SIiIiI\niIh9qVdDoE+cOEF+fj69e/cGICYmhhEjRnDq1Cn+85//EBERAUDnzp1p2bIlR44cwTAMvLy86Nmz\nJwD3338/3t7eODs70759e8rLy8nLy7PuCwgIACA0NJSnnnoKgFdffZWysjIAWrduTbNmzfjxxx9p\n3rw5AAMHDgTA19cXHx8fzp49S3h4OIsWLeKXX37Bzc2Nbdu28eGHH1b7mqOiom73domIiIiIiNgV\nmy6Ay8vLCQ8PxzAMAgICGD58OO7u7tb9Dg4OODs7k5ubi6enZ4VjPTw8yMnJwcfHh0aNGlm3Ozo6\n4ubmZn1vGIa1uPXy8rJu9/T05Pz58wAcPnyY+Ph4fvrpJxwcHDh37lyFcfoeHh4VciorK6N58+YE\nBASQnp5O69atadWqFa1atTLpzoiIiIiIiMh/s+kC2MHBgeTkZOv7EydOWItSgNLSUrKzs2natGmF\n7QD5+fn4+Pjc9ByGYVhfX+0JBjh//ry1IH7ppZd44oknGD58OAC//e1vbyn/yMhIkpOTadOmjbV3\nurrWrVt307xFRERERESkns0B/tWvfoWfn591camPPvqIqVOn0qpVK5o3b05SUhIABw8eJCcnxzqc\n+Uau7ck9fvw4x44dAyAlJYWHH34YuFIYd+zYEbiyWFZxcbF1fvGNhIWFceDAAdLS0ggPD6/exYqI\niIiIiF2wWCx19svW2GwPcFU9nIsWLeKll15iwYIF+Pr6Mnv2bAAWLlzI1KlTefvtt3Fzc2Px4sW4\nurreNO6177t160ZCQgL/+te/cHNz45133gHg+eefZ+zYsXh7ezN8+HCGDx/Oq6++yj//+c8bxvPy\n8uLhhx+moKDAOl9YRERERERE7gzDYotley1Yv349mzZt4h//+IepcadPn84DDzzAiBEjTI2rIdB1\nW7NmzUyJc+7cOVPimMGsazKDGffFjOupS98fsQ+dOnUyJc6XX35pShyRW1Ef/02UO+dqB1RNPfvs\ns6bEuVuKi4trO4UqVdapWJfVqyHQtubEiRPs3LmTQYMG1XYqIiIiIiIi9Z7NDoG2dW+99RYbN25k\n6tSpFVauFhERERERkTtDBfAtGjp0KEOHDjUt3vjx4xk/frxp8UREREREROTGNARaRERERERE7IIK\nYBEREREREbELGgItNuGJJ54wJY7Zq3jfrvq4UmVduiZnZ+cax6hL11OXmHFvS0pKTMhEKmPW6s0e\nHh41jnHhwgUTMqk7zLgnUP/uixnOnz9f2ymIDWnYsGFtpyA2TgWwiIiIiIhIHaYn15pHQ6BFRERE\nRETELqgAFhEREREREbtgEwXw6dOn6dSp03Xb169fz6hRo2ohIxEREREREbE1NlEAAxiGUa3tIiIi\nIiIiIteymQK4OvLy8nj22WcJCQlh8ODBZGZmAldWGZwwYQJhYWEMHDiQZcuWWY/x9/fno48+YtCg\nQfTt25fPPvuMuLg4goODeeqppygvL+f06dP06NGD9957j0GDBvHb3/6WTz/9FLgyMX369OmEhYUR\nEhLCyy+/TFlZGQCTJ09myZIlPPHEEwQHBzN69GiKi4t54403mDlzpjWHgoICunbtSn5+/l28WyIi\nIiIiIvahXhbACxYsoH379mRkZDB37lzi4uK4fPkyCxYswMvLi5SUFFatWsXq1as5ePCg9bj8/Hw2\nbdpEWFgY48eP5/nnnyclJYX/9//+H1lZWQBcvHgRR0dHNm3axLx583j11VcpLy8nPT2dgwcPkpSU\n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\nwaSmplJeXg7Atm3bePjhh2ncuPFdumIRERERERH7YRdDoOHK81+vDmm2WCw0bdrUWrDeyMaNG62v\ne/TowamLGyVaAAAgAElEQVRTpwDYs2cP3bt3x8fHB4D58+fj5OTE/v37K41T2V9HOnbsiIeHB3v3\n7qVXr15kZGQQERFRreuKioqqVnsRERERERF7ZTcFcFVzgFetWsXKlSsxDIOJEyfy4IMPVtj/ySef\nkJiYSGFhIWVlZdZCNi8vDw8PD2s7Z2fn28orMjKSzZs307NnT7KyspgzZ85txRERERERkfrJFoca\n11V2UwBX9UMTHR1NdHS09f3p06etr7Ozs3nttdf4+OOP6dChAydPniQsLAwAb29vDh06ZG37yy+/\ncOnSpWrnFRkZyeOPP06fPn3o3r077u7u1Tp+3bp1lW6vbBi2iIiIiIiIPdMc4Epc28vr5uZGu3bt\nKC0tZc2aNQAUFRURGBjIoUOHOHPmDBaLhWnTprF27dqbxnZycuLixYuUlZUB0K5dO1q3bs38+fOr\nPfxZREREREREbp1dFMCGYRAbG3vdc4BXrVpVZXu4snJzYGAgoaGhjBgxguDgYLp06cLIkSNp3rw5\n06dPJzY2lrCwMBwdHfnzn/98wxwAOnTogJeXF7179+bs2bMADBw4kNzcXPr162fuhYuIiIiIiIiV\nYdGA8lqXnJxMWloaCxcuNC2mhkDfObNnz65xjClTppiQSd3i5uZW4xiFhYUmZCJim5o1a1bjGOfO\nnTMhk7rDjM8V0GdLXafvs1THCy+8YEqc+Ph4U+LcLXl5ebWdQpW8vb1rO4VqsYse4LqsqKiIZcuW\nERMTU9upiIiIiIiI1GsqgGvR9u3biYiIoF+/fnTv3r220xERERERkTrIYrHU2S9bYzerQNdFQUFB\nBAUF1XYaIiIiIiIidkE9wCIiIiIiImIX1AMsIiIiIiJSh9niUOO6SgWwSDW99957NY4RGxtrQiaw\nYsWKGscwa+W+Jk2a1DjGd999Z0ImIrbJjBWczfp9riurjbq4uJgSR6sD1236/kh15OTk1HYKYuM0\nBFpERERERETsggpgERERERERsQsqgEVERERERMQu2G0BHBwczMGDB6/bvmrVKnr37s3f//7324o7\natQovv76a7KyshgwYAAA8fHxrFmzBoDdu3dz9uzZ209cREREREREbosWwfov6enpvPDCC/z+97+/\n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\nqdDDDJX3wvbt25c1a9bw/PPPA/DAAw/g7e1Nnz59cHZ2Nu+iRUREREREpALDov70Wvf0008zcuRI\nfvvb35oWU0Og75zGjRvXOMatjBaQ29euXbsaxzh+/LgJmYg9MOMzwSz6bBGR+u7IkSOmxOncubMp\nce6W06dP13YKVWrZsmVtp1AtdtEDXJcdOHCAM2fOmFr8ioiIiIiIyPXq/SJYddmUKVM4dOgQb775\nZm2nIiIiIiIiUu+pAK5Fs2fPru0URERERERE7IYKYBEREREREal1a9eu5R//+AcAfn5+TJ06lbZt\n2zJ//nwyMjJwcHAgJCSEiRMn3vY5VACLiIiIiIhIrfr+++9588032bRpE82aNeN///d/mTx5MiNH\njmT//v1s3rwZi8VCTEwMaWlpDBgw4LbOowJY7IqLi0uNY9S3VVafe+45U+L87W9/MyWOGXJycmo7\nBbEj7u7upsQ5d+6cKXHqCk9PzxrHKCgoMCETc5jx7wfApUuXTIkjYq9WrlxpSpy5c+eaEudusYcH\n93z33Xf86le/olmzZgA88sgjLFiwgJSUFIYOHYqT05XS9Xe/+x0pKSm3XQBrFWgRERERERGpVV26\ndOHHH3/km2++wWKxkJaWRq9evThx4gRt2rSxtmvTpg3ff//9bZ9HPcAiIiIiIiJSq3x9fZkwYQJD\nhgzB3d2dhg0bkpiYyBNPPIGzs7O1naurK0VFRbd9HhXAIiIiIiIicluioqIq3b5u3bpqxfn6669Z\nunQpW7dupXnz5mzatIkxY8bQsGFDSkpKrO2Kiopwc3O77Xzr1RBof39/QkNDiYiIICwsjKeffppT\np07VSi6TJ09m6dKltXJuERERERGpPywWS539MsvevXvp3r07zZs3ByA8PJxvv/0Wb29vTp48aW13\n8uRJ7rvvvts+T73qATYMg8TERHx9fQGIj49n1qxZKkRFRERERETugOr29FalXbt2/POf/yQ/P5/G\njRuzfft2mjVrxh//+EeWLl3K4MGDKS8vZ82aNcTFxd32eepVAfzff4V45JFH2LZtW5VtZ82aRWpq\nKm3btiUoKIidO3eSmJjIhQsXmDlzJl988QXl5eWMGTPG2rW/b98+5s2bR3FxMR4eHrz22mt07tz5\nhnkdO3aM6dOnk5+fj6urK3FxcfTu3RuAd999lw8//BAnJyeCgoJ45ZVXTLobIiIiIiIitqFv3758\n+eWXDB8+HAcHB9zd3Xnrrbfo1q0bX331FUOGDMEwDAYNGkRQUNBtn6deFcDXKikpYePGjQQHB1e6\nf8eOHezevZuMjAwuXbrEiBEj8PHxAWDOnDk4OjqSmppKXl4eUVFRBAQEcM899zBhwgTeeecdunbt\nSlpaGnFxcaSmplaZh8ViIS4ujrFjxxIREcHRo0cZPXo027Zt46uvvmLt2rVs2rQJJycnoqOjSU1N\nJTQ09I7cExERERERsT328BgkgHHjxjFu3Ljrtr/wwgu88MILppyj3hXAsbGxODg4kJOTg6+vL2PG\njKm03f79+wkKCsLV1RVXV1ciIyPZt28fANu3b+e9994DwNvbm/79+5OWlka3bt1o0aIFXbt2BWDA\ngAG89tprnDp1ilatWlV6nlOnTvGf//yHiIgIADp37kzLli05cuQIe/bsISgoiIYNGwKQmJhYYYWz\nW1HVpHMRERERERGpqN4VwNfOAd6/fz/R0dFs2LCB1NRUVq5ciWEYTJw4kYKCAvz8/KzHXZ1sDVBQ\nUMCECRNwdHTEYrFw6dIlwsLCyMvLw9PTs8L5PDw8yM3NZcmSJRw+fBjDMEhISLDuz83NrfSYnJwc\n8vLyrLkCuLi4mHkrRERERERE5Br1rgC+dnhAz549admyJQcOHCA6Opro6GjrvgMHDlBYWGh9f+7c\nOetrX19f/vrXv3L//fdXiL1v3z7y8vIqbDt//jxNmzZl3rx5lebTtGlT8vPzK2zLz8/Hx8cHb2/v\nCvuuvm7cuPGtXm6Vk84Nw7jlGCIiIiIiIvagXj0G6b8dP36cEydOcO+99163LyAggO3bt3Pp0iUK\nCgpITk627uvXrx+rV68GoLS0lDlz5vD1118TEBBATk4OX3zxBQCbN2/Gz8+Pli1bVplDq1at8PPz\nIykpCYCDBw+Sk5NDQEAAwcHBbN26lQsXLlBaWsrYsWPJzMw08xaIiIiIiIjI/69e9QAbhkFsbKx1\n6LKLiwszZsygffv217Xt378/O3bsIDw8nLZt2xIREcHevXsBeP7555kxYwZhYWEYhkHv3r3p0KED\nDg4OLFq0iOnTp1NcXEyTJk1YuHDhTfOKj49n2rRpvP3227i5ubF48WJcXV3p0qULo0ePZvDgwTg7\nOxMYGEhkZKTp90VERERERETAsNjLkmI3sWrVKj777DOWLFlS26mYQkOgK2fGPOtLly6ZkEnd8dxz\nz5kS529/+5spcczw3/Pub0dBQYEJmYg9qGoRxOq6dirO7apLn0/17ffQrHU66tL3SMQWTZo0yZQ4\nc+fONSXO3XLy5MnaTqFKbdu2re0UqqVeD4G+kWPHjhEcHExBQQGlpaWkp6dbV3cWERERERGR+qde\nDYGuDn9/f6KiooiKisLR0ZHu3bszcuTI2k5LRERERERE7hC7LYCh6gcti4iIiIiI1BWatWoeux0C\nLSIiIiIiIvZFBbCIiIiIiIjYBbseAi32p66svunq6mpKnOLi4hrHMGv15vj4+BrHmDhxogmZgIOD\n/rYnd8+pU6dMidO4ceMax/D29jYhEzh79myNY5ixgnNd+qxs2LChCZnUnX+HRGzV559/XtspiI3T\n/xJFRERERETELqgAFhEREREREbugIdAiIiIiIiJ1mFaBNk+9KoD9/f1p27Ytjo6OwJUfFMMwmDdv\nHg899NBdzWXy5Mm0bduWZ5999q6eV0RERERERCpXrwpgwzBITEzE19e3tlMRERERERGROqZezQG2\nWCy3PDzAYrEwc+ZMevfuTXR0NMuWLSMmJgaACxcu8PLLLxMaGkr//v1Zt26d9bh9+/YRFRVFREQE\nw4cP5+jRozc917FjxxgxYgTh4eEMHTqU3bt3W/e9++67hISEEBYWxty5c6t5xSIiIiIiUt9drXPq\n4petqVc9wNWxY8cOdu/eTUZGBpcuXWLEiBH4+PgAMGfOHBwdHUlNTSUvL4+oqCgCAgK45557mDBh\nAu+88w5du3YlLS2NuLg4UlNTqzyPxWIhLi6OsWPHEhERwdGjRxk9ejTbtm3jq6++Yu3atWzatAkn\nJyeio6NJTU0lNDT0bt0GERERERERu1HvCuDY2NgKc4CbNm3KypUrr2u3f/9+goKCcHV1xdXVlcjI\nSPbt2wfA9u3bee+994Arz1Ts378/aWlpdOvWjRYtWtC1a1cABgwYwGuvvcapU6do1apVpfmcOnWK\n//znP0RERADQuXNnWrZsyZEjR9izZw9BQUHWZwsmJibi7OxcreuNioqqVnsRERERERF7Ve8K4Krm\nAK9atYqVK1diGAYTJ06koKAAPz8/6/7mzZtbXxcUFDBhwgQcHR2xWCxcunSJsLAw8vLy8PT0rBDX\nw8OD3NxclixZwuHDhzEMg4SEBOv+3NzcSo/JyckhLy+vQq4uLi41vXwREREREalnbHGocV1V7wrg\nqn44oqOjiY6Otr4/cOAAhYWF1vfnzp2zvvb19eWvf/0r999/f4UY+/btIy8vr8K28+fP07RpU+bN\nm1fpeZs2bUp+fn6Fbfn5+fj4+ODt7V1h39XXjRs3vtElVnDt/ORrGYZxyzFERERERETsQb1aBKs6\nAgIC2L59O5cuXaKgoIDk5GTrvn79+rF69WoASktLmTNnDl9//TUBAQHk5OTwxRdfALB582b8/Pxo\n2bJlledp1aoVfn5+JCUlAXDw4EFycnIICAggODiYrVu3cuHCBUpLSxk7diyZmZl38KpFRERERETs\nV73qATYM47o5wIZhXNf7C9C/f3927NhBeHg4bdu2JSIigr179wLw/PPPM2PGDMLCwjAMg969e9Oh\nQwccHBxYtGgR06dPp7i4mCZNmrBw4cKb5hUfH8+0adN4++23cXNzY/Hixbi6utKlSxdGjx7N4MGD\ncXZ2JjAwkMjISPNvjIiIiIiIiGBYNKAcuDJH+LPPPmPJkiW1nYopNAS6bnN1dTUlTnFxsSlxzBAf\nH1/jGBMnTjQhk+pNI6jKf09dELnTzPi5Neuz5ezZs6bEqam69FlpxvcH9NkiUlNmPS0lJSXFlDh3\ny3fffVfbKVTpvvvuq+0UqsVuh0AfO3aM4OBgCgoKKC0tJT093bq6s4iIiIiIiNQ/9WoIdHX4+/sT\nFRVFVFQUjo6OdO/enZEjR9Z2WiIiIiIiIhVo0K557LYABhg3bhzjxo2r7TRERERERETkLrDbIdAi\nIiIiIiJiX+y6B1hERERERKSu0xBo86gAFqkFdWn15oiICFPiTJs2rcYxPDw8TMhEq6zK3VWXfm5v\n9Fz6u82M++Lp6WlCJnD69Okax9Dnikjd8PDDD9d2CmLjNARaRERERERE7IIKYBEREREREbELKoBF\nRERERETELtT7Ajg4OJiDBw/e1XNmZWUxYMCAu3pOERERERERuTEtgnWHGIZR2ymIiIiIiEg9oFWg\nzVPve4CrsmvXLoKCgoiMjOTDDz+kR48enDlzBoA1a9YQHh5Ov379iIuLo6SkBIDz588zYcIEwsLC\nGDhwIMuWLbvpeUpKSpg2bRphYWFERkYyb9486w/w0aNHiYqKIiwsjJiYGE6dOnXnLlhERERERMTO\n2WUBXF5ezuTJk5k1axZbtmzhxIkT1sfS7N+/nyVLlpCYmMinn36Kh4cHixYtAmDBggV4eXmRkpLC\nqlWrWL169U2HVyckJJCdnU1ycjLr1q1j//79bN68GYC4uDgmTpxISkoKISEhzJo1685euIiIiIiI\niB2zyyHQx48f5/Lly/Tu3RuAmJgY3n//fQC2bdtGeHg4Pj4+AAwfPpzx48fz8ssvs3PnTv7+978D\n4OXlRf/+/cnMzKR79+5VnmvHjh2MHj0awzBwcXFh0KBBZGZm8tBDD5Gfn18hhxEjRlT7WqKioqp9\njIiIiIiI2A4NgTaPXRTA5eXlhIeHYxgGAQEBDB8+HE9PT+t+X19f6+sLFy6Qnp5OZmYmAGVlZZSW\nlgKQm5uLl5eXta2npyfnzp0jIyODBQsWYBgG0dHRtG/f3tomNze3wrk8PT3JyckhLy8Pd3d363YH\nBwecnZ3Nv3gREREREREB7KQAdnBwIDk52fr+m2++obCw0Pr+3Llz1te+vr4MHTqUl19++bo4Pj4+\n5Ofn4+fnB0B+fj4+Pj6EhIQQEhJibZeVlXXdMVddPcbb27vC9tLSUrKzs2nZsmW1rm3dunWVbtci\nXCIiIiIiIhXZ5Rzgtm3bUlpayr/+9S8AVq9ebS0Yg4ODSU9PJzc3F4CMjAyWL18OQFBQEGvWrAGu\n9Oymp6cTGBh4w3MFBQXx8ccfU15eTmFhIRs3biQoKIhf/epXtGjRgrS0NAA++ugjpk6dekeuV0RE\nREREbJfFYqmzX7am3vcAV9YT6uzszLRp05g0aRJeXl78+c9/xsHBAcMw6NixI8888wyxsbFYLBaa\nNGnCjBkzAJgwYQJ/+ctfCA8Px9HRkWeeeYaHHnrohue/urpzZGQkDg4OhIeHExoaCsCiRYt46aWX\nWLBgAb6+vsyePdv8GyAiIiIiIiIAGBZbLNtNVlRURPfu3fnXv/5VYV6uLdMQaLlVERERpsTZtWuX\nKXHMcOHChdpOQeyIh4eHKXHM+Lmt7jSaqpw+fbrGMcy4L9euoVETZlyPiNQNr776qilxZs6caUqc\nu+XYsWO1nUKV/P39azuFarHLIdAAw4YNIykpCYAtW7Zw33331ZviV0RERERE6o/aHuasIdD1wJQp\nU5g+fTpvvfUW7u7uzJ07t7ZTEhERERERkTvIbgvg7t2788knn9R2GiIiIiIiInKX2G0BLCIiIiIi\nYgtscahxXWW3c4BFRERERETEvqgHWGxCgwYNTIlTVlZW4xjl5eUmZGIOB4ea/w3r6mJw9YkZ12TW\n6tj1jRk/c3Xpd8gMZq06bsbn3E8//WRCJuYoLi6ucYy6tKK7WQtl/vLLL6bEEbFX33zzTW2nIDZO\nBbCIiIiIiEgdpiHQ5tEQaBEREREREbELKoBFRERERETELtSrAvj06dN06tTpuu3r169n1KhRdz0f\nf39/srOz7/p5RURERERE5Hr1qgAGMAyjWtvvpNo4p4iIiIiIiFTOrhfBOn36NOPGjePChQv06tWL\n7OxswsLCGDJkCAcOHGDOnDkUFBTQpEkT3nzzTVq3bo3FYmHRokWkpaVhGAZdunRh2rRpuLq6Xhf/\n2snqK1asYM2aNVgsFtq1a8esWbPw9vYmLy+PyZMn8+2339KoUSNefvllevXqdTdvg4iIiIiIiF2o\ndz3A1TFv3jz69OlDRkYGffr0Yc+ePQBcvHiR5557jri4ONLS0oiNjWXChAnAlcer7Nq1iw0bNrBl\nyxYKCgpISEi44Xk+//xz3n//fVauXElSUhItWrQgPj4egAULFtC+fXsyMjKYO3cucXFxXL58+Y5e\nt4iIiIiIiD2y6wL4wIED1md9hoSE4OvrC8D+/fvx8/Pj0UcfBa48D/SHH37g7Nmz7Nixg6FDh+Li\n4oJhGERFRZGZmVlp/KtDoHfs2EFoaCje3t4ADBs2zHrMjh07iIyMBODBBx9k69atpj3zVkRERERE\nbJ/FYqmzX7amXg2BdnBwqPSbUFZWhmEYjBo1irNnz2IYBklJSZw/f57GjRtb2zVv3hyACxcu8MMP\nP1iLY4vFgouLC7m5ueTm5uLp6Wk9xsvLi5ycHH7++Wf+9Kc/YRgGAQEBzJ0715pLbm6uNfa1xwDk\n5eVViOfm5lata/7/2LvzuKqq/f/jr83sSIjigDfvN7W0FEvNHCgVkUktRU2T4BeVZVqOqVfDNPE6\nZZpDamlZoXUtwzEUwVJT63LNq6ZpZWkpOTI4ogjn/P7w4bmSUCAbOXDez8eDx4O9z9qf/dmHfdAP\na+21wsPDi9ReRERERETEUZWrAtjLywvDMDhx4gS1atWy7T9y5Ai+vr5MnDgxT/vKlStz8eJF2/bp\n06cB8PHxoX79+qxYseKmc1SvXp3MzEzbdmZmJt7e3vj4+LB+/fo8ba/3AP/xmIyMDLy9vW05Z2Rk\nUKdOHeDac8m1atXC2dn5lt4DERERERERyV+5GgLt4eFB9+7dmT17tu052u+//55Vq1YRGRl5U/tm\nzZrZitYvv/zSVgA3a9aM06dPs3fvXgCOHj3KqFGjAOjQoQNr1qzh8uXL5OTksGLFCjp06JBvPtd7\ngBPdpO0AACAASURBVNu3b09SUhJnz54FYPny5XTs2BGAgIAAVq5cCcChQ4cIDw8nNze30NccHx+f\n75eIiIiIiJQPpT3MWUOg7VhMTAxvvvkm3bt3B64NN545cyYNGza8qe3IkSMZMWIECQkJPPLII9x/\n//0AuLu7M2fOHGJjY7l06RKurq4MGTIEgJCQEH788Ufb0OPWrVvnW1zD/3qA/fz86N+/P/369cNq\ntdK4cWMmTJhgy2H06NEEBARQuXJlZs6ciZubm6nviYiIiIiIiIBhLYtlewnp1asXAwcOJCAgoLRT\nKbbytgaxWRODFaV3vSAWi8WETMzh5FT8QRz2dD1mSUhIKHaM63MASF6650qOGb/nzPgdB+b8jMy4\nHntaFaFy5cqmxLlw4YIpcUQcVZ8+fUyJ869//cuUOLfLd999V9opFKhp06alnUKRlLse4KKYPn06\nWVlZjB8/np9//plffvmF++67r7TTEhERERERsVGfpXkcugCOjo5m9OjRBAUF4ezszPjx4/PM1iwi\nIiIiIiLlh0MXwDVq1OC9994r7TRERERERETkNnDoAlhERERERMTeaQi0ecrVMkgiIiIiIiIiBVEB\nLCIiIiIiIg5BQ6ClTLCnpTDsiZaTyZ8ZSxjVqlWr2DFOnDhR7Bj2RvdcySlvv+e8vb2LHcOePkNa\nvqjktGjRwpQ43377rSlxxL4NGTKktFMoFRoCbR71AIuIiIiIiIhDUAEsIiIiIiIiDsFhhkA3atSI\nevXq4ezsjMVi4c477+TVV1+lbt26tzWP0aNHExoaSocOHW7reUVEREREpGzSEGjzOEwBbBgGcXFx\n+Pj4ADBz5kwmTZrEwoULb2se06ZNu63nExERERERkWscZgi01WrN85eT1q1bk5qamm/blJQU+vbt\ny+TJkwkMDKRXr17s3buXqKgo/P39mTt3rq3thx9+SJcuXQgLC2PQoEGkp6ezZcsWunXrlidm9+7d\n2bZtG5GRkaxduxa4NllDr169CAoKom/fvhw9erQErlxERERERETAgQrgG2VnZ7NmzRoCAgIKbLN/\n/36CgoJITk7GMAxiY2NZvHgxS5Ys4e233yY7O5vdu3ezZMkSli5dSkJCArVr12bWrFm0bduWU6dO\n2Qrso0ePcvLkSdq2bWuLf/HiRQYOHMiIESPYuHEjUVFRDB06tMSvXUREREREypbrnXn2+FXWOFQB\nHBUVRWhoKP7+/uzbt4/w8PAC23p6etKyZUsAGjRowIMPPoibmxsNGzbEYrGQkZHBli1bCA4OxsvL\nC4BevXqxfft2XF1d6dChA1988QUAmzZtIjAwECen/73dO3fupFatWrRp0wa4tmzLb7/9ZldLPoiI\niIiIiJQnDvMMMJDnGeCdO3cSERHBqlWrSExMZOnSpRiGwfDhw6latSqVKlWyHefs7EzFihVt205O\nTuTm5pKenk7NmjVt+z09PUlLSwMgODiYuLg4IiMjSU5OZtCgQXlyOX/+PL/99pttvVKr1Yq7uzvp\n6elFWn/0z4p4ERERERER+R+HKoBv7KJv2bIlvr6+fPvtt0RERBAREWF7LSUlpVDxqlevTmZmpm07\nMzMTb29vAPz9/Rk7diy//vorR44coXXr1nmO9fHxoX79+qxYsaI4lyQiIiIiIuVcWRxqbK8cqgC+\n0eHDhzly5Ah33XVXkY+9fgO2b9+eIUOGMGjQIDw9PfnXv/5lW97Izc2Ndu3a8frrr9OpUycMw8gT\no1mzZpw+fZq9e/fi5+fH0aNHmTt3LtOnTy9SLvHx8fnu/+P5REREREREHJ3DFMCGYRAVFYWzs7Nt\nuPHEiRNp2LBhoY7Nb9vPz4/+/fvTr18/rFYrjRs3ZsKECbZ2ISEhDB48mPfff/+mY93d3ZkzZw6x\nsbFcunQJV1dXhgwZUvwLFRERERERkXwZVvWnl0vqARYpnqI8i18QTWonjkyfISmsFi1amBLn22+/\nNSWO2LcdO3aYEuf6RLRlhT3f32Z9hm8Xh5oFWkRERERERByXCmARERERERFxCA7zDLCIiIiIiEhZ\npKdWzaMeYBEREREREXEIKoBFRERERETEIWgItIiIiIiIiB3TEGjzqAAWEcmHGcuvmLEMDGgpGCmb\n9BmSwjJreRczlmKx56VmRMQcGgItIiIiIiIiDkE9wCIiIiIiInZMQ6DN4zAFcKNGjahXrx7Ozs7A\ntZvIMAymTZtG06ZNb1seo0ePJjQ0lA4dOty2c4qIiIiIiIgDFcCGYRAXF4ePj0+p5jFt2rRSPb+I\niIiIiIijcphngK1Wa6GHDqSkpNC3b18mT55MYGAgvXr1Yu/evURFReHv78/cuXNtbT/88EO6dOlC\nWFgYgwYNIj09nS1bttCtW7c8Mbt37862bduIjIxk7dq1wLWJFnr16kVQUBB9+/bl6NGj5l2wiIiI\niIiUC9drGXv8KmscpgAuqv379xMUFERycjKGYRAbG8vixYtZsmQJb7/9NtnZ2ezevZslS5awdOlS\nEhISqF27NrNmzaJt27acOnWK1NRUAI4ePcrJkydp27atLf7FixcZOHAgI0aMYOPGjURFRTF06NDS\nulwREREREZFyz6EK4KioKMLCwggLCyM0NJQnn3yywLaenp60bNkSgAYNGvDggw/i5uZGw4YNsVgs\nZGRksGXLFoKDg/Hy8gKgV69ebN++HVdXVzp06MAXX3wBwKZNmwgMDMTJ6X9v986dO6lVqxZt2rQB\nICwsjN9++01LNYiIiIiIiJQQh3kGGCjwGeBly5axdOlSDMNg+PDhVK1alUqVKtled3Z2pmLFirZt\nJycncnNzSU9Pp2bNmrb9np6epKWlARAcHExcXByRkZEkJyczaNCgPOc8f/48v/32G2FhYcC1YQ3u\n7u6kp6cXad3D8PDwQrcVEREREZGypywONbZXDlUAF3TjREREEBERYdtOSUkpVLzq1auTmZlp287M\nzMTb2xsAf39/xo4dy6+//sqRI0do3bp1nmN9fHyoX78+K1asKOpliIiIiIiIyC1wqALYLNcL6fbt\n2zNkyBAGDRqEp6cn//rXv2zLG7m5udGuXTtef/11OnXqhGEYeWI0a9aM06dPs3fvXvz8/Dh69Chz\n585l+vTpRcolPj4+3/1/PJ+IiIiIiIijc5gC2DAMoqKibloH+I+9vwUdm9+2n58f/fv3p1+/flit\nVho3bsyECRNs7UJCQhg8eDDvv//+Tce6u7szZ84cYmNjuXTpEq6urgwZMsSEKxURERERkfJEQ6DN\nY1j1bpZL6gEWKX1FeZ7/z2hyPHFU+gxJUbRo0aLYMb799lsTMpGStGPHDlPiXJ+Itqz4+uuvSzuF\nApW199KhZoEWERERERERx+UwQ6BFRERERETKIg3aNY96gEVERERERMQhqAAWERERERERh6ACWERE\nRERERByCCmARERERERFxCFoGqZzSMkgiIiIiUt44auli1vJPJaFt27alnUKRaBZoERERERERO+ao\nhX9J0BBoERERERERcQgOXQAHBASwa9eu23a+5ORkXnnlldt2PhEREREREfkfDYG+jQIDAwkMDCzt\nNEREREREpAzREGjzOHQPcEECAgJYunQp4eHh+Pv7k5SUxMSJE+ncuTN9+/bl/PnzAPzwww888cQT\nhIaG0qNHD7Zv347VasXf35/vv//eFu+DDz5g+PDhrFy5kujoaADOnz/PqFGjCA4OpnPnzsTHx5fK\ntYqIiIiIiDgKFcAF+Omnn4iPj+eFF15g1KhRhIWFkZSURG5uLhs3bsRqtTJ8+HAiIyNZv349sbGx\nDB8+nKysLIKCgvjiiy9ssZKTkwkLCwP+NzvzlClTcHZ2JjExkU8++YS5c+dy6NChUrlWERERERER\nR6ACuADXhyrffffdeHh40LJlSwAaNGjAqVOnOHbsGGfOnLEVtk2aNMHX15fvvvuOoKAgNm3aBEB6\nejo//PADjzzySJ74mzdvJioqCgAvLy86d+7Mxo0bb9fliYiIiIiIOByHfwbYYrEQGhqKYRj4+fkx\ndepUACpVqgSAk5MTFStWtLV3dnYmNzeX9PR0qlatmidWlSpVSEtLIyQkhFOnTnHixAm2b99O+/bt\ncXNzy9P23LlzDB06FGdnZ6xWK1euXCEkJKTI+YeHhxf5GBERERERKTv0DLB5HL4AdnJyYv369UU+\nztvbm8zMzDz7MjMzqV69Ok5OTnTq1IlNmzaxbds2evfufdPxPj4+vPXWWzRo0OCWcxcREREREZHC\nc/gC+FbVrVuXWrVqkZCQQFhYGLt27SItLQ0/Pz8AgoODWbJkCQcPHmTOnDk3Hd+pUyc+/vhjxo0b\nR05ODq+//jrdu3encePGRcqjoMmzrj9rLCIiIiIiItc49DPABRWJhS0eZ86cydKlSwkLC2Py5MnM\nnj0bDw8PAFq3bs3+/fvx9/fH1dX1pmOHDBnC+fPnCQkJoVu3blgsFu65555bvxgRERERESmXrFar\n3X6VNYa1LGYtf0k9wCIiIiJS3jhq6bJ169bSTqFAf5zs1945dA+wiIiIiIiIOA49AywiIiIiImLH\nHLXnuySoB1hEREREREQcggpgERERERERcQgaAi0iIiIiImLHNATaPOoBFhEREREREYegAlhERERE\nREQcgoZAi4iIiIiI2DENgTaPeoBFRERERETEIagAFhEREREREYfgMAVwamoq99133037V65cSXR0\n9G3L4+TJk3Tr1u22nU9ERERERESucZgCGMAwjCLtLwk1a9Zk7dq1t+18IiIiIiIico1DFcBFMWbM\n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\nIiL506Bd86gHWERERERERByCCmARERERERFxCBoCLSIiIiIiYscsFktpp1BuqAAWEcmHGbOsVqhQ\nwYRMKHC9cbEPZszeDObdL/bCjBmcBwwYYEImsHDhwmLHsKeZl6tXr25KnDNnzpgSR+R2Km+/K+X2\n0xBoERERERERcQjqARYREREREbFjmgXaPOoBFhEREREREYdgFwVwo0aNCA4OJiwsjLCwMEJDQwkL\nC+O77767rXmMHj2azZs3mxbv008/tX0fHR3NgQMHCt1eREREREREzGUXQ6ANwyAuLg4fH59SzWPa\ntGmmxcrNzWX69On07t0bgCVLlhSpvYiIiIiICGgItJnsogfYarUW+oeakpJC3759mTx5MoGBgfTq\n1Yu9e/cSFRWFv78/8+bNA2DlypVER0fbjrtxOyUlhfDwcLp27UqXLl1ITEwEIDIykrVr1wKwdetW\nunbtSkhICAMGDODs2bMAbNq0iW7duhESEkLPnj05ePBgnryGDh3KyJEjefrppzl//jxhYWEcO3aM\ngIAAdu3aRW5uLjExMYSEhBAcHMzgwYO5cOFCnvapqanmvLEiIiIiIiJiYxcFcFHt37+foKAgkpOT\nMQyD2NhYFi9ezJIlS1i4cCHZ2dnAtZ7lG13fnj59OmPHjmXdunUsWLCApKSkPO2ysrIYOXIks2fP\nZsOGDdSrV485c+aQm5vL2LFj+ec//8mGDRsICAhg+vTptuMOHDhAv379eP3115k8eTIuLi4kJCRQ\nt25dW5tt27Zx7NgxNmzYQGJiIg0aNGDPnj152vv6+pbUWyciIiIiIuKw7GIINEBUVBTOzs7AtR5h\nb29vli5dmm9bT09PWrZsCUCDBg3w8vLCzc2Nhg0bYrFY/nJNRm9vb1atWkW1atW46667mDFjRp7X\nd+3aRZ06dahfvz4AI0eOBMDZ2ZkdO3bY8mzRogWrVq2yHefh4UGrVq3+9NxeXl78/PPPJCUl4e/v\nz+DBgwFuudc3PDz8lo4TERERERFxNHZTABf0DPCyZctYunQphmEwfPhwqlatSqVKlWyvOzs7U7Fi\nRdu2YRjk5ub+6bmmTJnC/PnziY6OxsPDgxEjRhAUFGR7PSMjgypVqti2XVz+9zZ98MEHrFq1iqtX\nr3LlypU8vcx33HHHX16nn58f48aNIy4ujtGjRxMQEMCECRP+8jgREREREXFMegbYPHZTABf0Q42I\n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\nIiMjefzxx229ujduz5o1i8TERABq1arF66+/TnZ2NkFBQezfvx+AKVOmkJycjKurK7179+aZZ57B\narUyceJEvv76a3JycmjevDlTpkzB2dmZMWPG4Onpyddff03Xrl159913sVgsZGVl0adPH2JiYti4\ncSM//vgjr776KhcuXODq1atERUXxwAMPEBsba2v/xhtv3Jb3UkRERERExJEUqgCuWrUqy5cvJzEx\nkW3btnHq1CkAateuTZs2bQgODsbZ2blEE73RV199xccff8xvv/1G9+7dGTJkCGvXrmXatGnExcUx\nbdq0Ao89dOgQGzZsYP369Tg5ObFs2TJ27NhBy5YtbT3Oq1evZt++fSQlJXHp0iUeffRRWrVqxfHj\nx9m1axcJCQnk5OTQo0cPEhISbEX2N998w4oVK3B1deXKlSucPHmS2NhYUlJSbLHfeust+vbtS/fu\n3cnMzCQmJobHH3+cJ5980tZeRERERETkurI41NheFXohLWdnZ8LCwggLCyvJfAqlXbt2uLu707Bh\nQywWC506dQKurdG3evXqPz22SpUqZGZmsnr1ajp16kRERASQd53NrVu3EhwcjJOTE5UrVyYhIQEP\nDw+aNm1KQEAATk5OuLm50bRpU44ePWo7rk2bNri6uv7p+b29vdm4cSN333039957L/PmzbvVtwGA\n8PDwYh0vIiIiIiLiKApdAJ8+fZq1a9eyf/9+MjMzMQwDb29v/Pz86NKlC3fcccctJeDk5JTvXzRy\nc3MxDIPo6GhOnDiBYRgkJCQAUKlSpTzHV6hQwfZ9bm7un56vZs2azJ07l3fffZfY2FhatWrFa6+9\nlqdNZmYmVatWtW17eHgAkJ6ezqRJk9i/fz9OTk6kpaURFRVla+fp6fmX1zty5EgWLlzI0KFDyc7O\n5rnnnqNfv35/eZyIiIiIiIgUT6EK4H//+98MGDCArKws3N3dueOOO7BarWRkZLB69WrmzJnDokWL\n8PPzK3ICXl5eGIbBiRMnqFWrlm3/kSNH8PX1ZeLEiUWOCdd6rG8shs+dO2f7vlWrVrRq1YrLly8z\ndepUZsyYwdChQ22v33HHHWRkZNi209LScHd3580338TV1ZXPP/8cFxcXXn755SLnVaFCBYYNG8aw\nYcPYt28fzzzzDO3atbulawSIj4/Pd//tnEBMRERERERKjoZAm6dQs0BPmTKFunXrsnz5cnbv3s2W\n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\nzVLefreYwZ5GaJp1r6Snp5sSRxxXoWaB7tGjB++//z7Z2dklnY+IiIiIiIhIiShUD3DFihU5duwY\nbdu2pVmzZlSrVg0Xl7yHGobB5MmTSyRJERERERERR2WxWEo7hXKjUAXwO++8Y/t++/bt+bZRASwi\nIiIiIiL2rFAF8MGDB0s6D7sREBDAjBkzaN68eaGP+fTTT+ndu/ctHy8iIiIiIiIlr8BngFetWsXZ\ns2dvZy5l0unTp1m8eHFppyEiIiIiIuWU1Wq126+ypsACeMyYMRw7dux25mLXfvjhB5544glCQ0Pp\n0aOHbSj4E088we+//05YWBhXr14F4LvvvqNPnz488sgjTJ061RYjOTmZbt260blzZ5555hkyMzMB\nmDdvHuPGjePxxx8vcM1lERERERERKZ4CC+CyWM2XFKvVyvDhw4mMjGT9+vXExsYyfPhwLl26xOTJ\nk6lTpw4JCQm4uroCsH//fpYvX86KFStYunQpJ0+e5OjRo4wePZo333yTpKQkHnroIV599VXbObZu\n3cqiRYuIiooqrcsUEREREREp1wr1DLCjO3bsGGfOnCEsLAyAJk2a4Ovry3fffYdhGDe179q1KwA+\nPj7UqFGDEydOsH//fh566CHq168PQJ8+fZgzZ47tDw3NmjXD09OzyLmFh4ff6mWJiIiIiEgZoM5J\n8/xpAXzmzBl+//33QgerU6dOsROyBxaLhdDQUAzDwM/PjyeeeIKqVavmaVOlShXS0tKoXr36TcdX\nrlzZ9r1hGOTm5nL+/Hn+85//2Ipoq9WKp6cnGRkZALdU/IqIiIiIiEjh/WkBPGDAgCIFO3DgQLGS\nsRdOTk6sX7/etn3s2LGbJgTLzMzMt/gtiI+PD23btmX27Nmm5QkQHx+f7/78eqZFREREREQc2Z8W\nwL1798bHx+d25WK36tatS82aNUlISCAsLIxdu3aRlpaGn58f33//PRcvXsRiseDkVOAj1fj7+/PG\nG29w9OhR/va3v7F3717Wrl3LK6+8chuvREREREREyhoNgTbPnxbAffr04b777rtdudiFgnpOZ82a\nxauvvsq8efOoWLEis2fPxsPDg3vuuQdPT0/atWtHfHz8Tcdf365RowaxsbG8+OKL5OTkUKlSJcaO\nHVvi1yMiIiIiIiLXaBKsP9i0aVO++xs0aMBHH3100/5KlSrx+eefF3j8jdsdO3akY8eON8V48cUX\n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\nDMPAarUSHh7O4cOHGThwIIZh0L9//xsufkEFsIiIiIiIiDiYjz/+2PbvMWPGMGbMGFPiqgAGoqOj\niY6OtncaIiIiIiIi19FVq+ZxmVWgRURERERExLWpABYRERERERGXoBZoqRO04mXtMWtVRkda2deM\n1Vp//vlnEzJxPma8z862krRZ309m/S6awYzz265duxrHOHLkSI1jALRv377GMcz6TjDjfdbK41IX\nmfW9XZP7v9ZlaoE2j+P8bysiIiIiIiJSi1QAi4iIiIiIiEtQC7SIiIiIiIgDUwu0eZy2AA4JCaFF\nixZYLBbgyofGMAxefPFF/vznP9s5OxEREREREbnZnLYANgyDpKQkAgMD7Z2KiIiIiIiIOACnLYCt\nVuvvbhVISUkhLS0NX19fDhw4gKenJ4sWLSI4OJjCwkJmzJjB559/Tnl5OU8++SQxMTHAlVnmsWPH\nkpKSQmpqKitWrOD999/HarXi5eXF7Nmzad26NUePHuWFF14gLy8PT09PEhIS6NGjB7t372bevHnc\nfffdZGZmUlJSwpw5c+jSpUttnhoREREREalD1AJtHi2C9b927NjBsGHDyMjIoFevXrz88ssAzJ49\nG4vFwqZNm/jXv/7FggULOHbsWIV909LSKCoqYv78+axdu5a0tDRGjBjB1q1bsVqtJCQkEBcXR1pa\nGjNmzCAhIYGioiIADh8+TOfOnUlNTWXo0KEsWbLkpr92ERERERERV+C0M8AA8fHxFa4B9vf3Z/ny\n5ZWObdOmDR07dgQgPDyckSNHArB161b++c9/AuDn50efPn3YvHkzbdq0ASA0NBS4ct9RwzBYvXo1\nffv2JTw8HIBTp07x008/ERUVBUCHDh0ICgriiy++wDAMGjduTM+ePQG44447WLNmTbVe49XZaBER\nEREREfl1Tl0AV3UN8IoVK1i+fDmGYTB27FgAfHx8bM97e3uTn58PQEFBAaNHj8ZisWC1Wvn555+J\njIy0jb26n7u7O++++y5Llixh/vz5hISEMGXKFIqLi/H29q5wfC8vL3JycggICMDLy8v2uMViMe0m\n4SIiIiIi4hxUI5jHqQvgqnrlY2NjiY2NtW2npKSQm5tr287Pz7cVtoGBgSxatMg24/trQkJCSExM\n5PLly7z11ltMmzaNl156iby8vArj8vLyCAgIuJGXdJ3k5ORKHzcMw5T4IiIiIiIizkLXAP+v7Oxs\njh49CkB6erptIapevXqxcuVKAC5fvszs2bM5cuTIdft//fXXjBo1itLSUtzd3Wnfvj2GYdC8eXOa\nNm1KamoqAPv37ycnJ8fWbi0iIiIiIiI3h9POABuGcd01wIZhXDf7e1Xnzp1ZtmwZe/bsoWHDhrbF\nqEaNGsX06dOJiIjAMAx69OjBn/70J9sxrmrXrh3NmzenX79+1KtXj0aNGjFlyhQAXn31VaZMmcLC\nhQtp2LAhiYmJeHp61vYpEBERERERJ6BVoM1jWHU2SUlJYcOGDSxdutTeqZhGLdDye7m5mdMI4kjX\nptSvX7/GMX7++WcTMpHKmPGZc6TPm1nM+l00g6Oc38o6rm5E+/btaxzDrHNixvt89Y/7NVVaWmpK\nHJGb6S9/+YspcXbv3m1KnJslISHB3ilUae7cufZOoVoc539bERERERERkVrktC3QIiIiIiIizkBN\nu+ZRAQxER0cTHR1t7zRERERERESkFqkFWkRERERERFyCZoBFREREREQcmFqgzaMCWMTFOcpqr2Zq\n3LhxjWNoFeja42yfOX9/f3unYJOTk2PvFGzMOC8PPvigCZlA69ataxzjm2++MSETcz7/zvY7JFId\n//mf/2nvFKSOUwu0iIiIiIiIuATNAIuIiIiIiDgwtUCbRzPAIiIiIiIi4hJcpgAOCwtj//799k5D\nRERERERE7EQt0CIiIiIiIg5MLdDmcZkZ4KqEhISQlJTEwIED6d69Ox988IHtuVWrVhEZGUmvXr1I\nSEigpKQEgIkTJzJnzhwGDBjApk2b+OabbxgyZAj9+/cnPDycFStWAFBSUsLUqVOJiIigb9++vPji\ni7YPb1hYGKtWrWLQoEHce++9vPjiizf/xYuIiIiIiLgQly+AAU6cOMG6detYvnw5s2bNIj8/n717\n97JgwQKSkpL4+OOP8fLy4rXXXrPts2vXLtasWUN4eDgLFy5kyJAhbNiwgVWrVrFz505KS0tZtmwZ\nP/zwA2lpaSQnJ7N37142btxoi7F3715Wr17N2rVrSUpK4ocffrDHyxcREREREXEJaoEGHn74YQBa\ntmxJq1atOHToELt27SIyMpKAgAAAHnnkEZ599lnGjx8PQLdu3fDw8ACu3Otw8+bNtGvXjjvuuIOF\nCxcCsG3bNkaMGIFhGNSvX5/+/fuTlZVF//79AejXrx8AgYGBBAQEcPbsWZo0aVKt3GNiYmp+AkRE\nRERExGGpBdo8LlUAl5eXExkZiWEYdOzYkTlz5gDg4+NjG+Pl5UVBQQGFhYVkZGSQlZUFQFlZGWVl\nZbZx1+4zbtw4Xn/9dUaPHk1JSQmPP/44Q4cO5fz583h7e9vGeXt7k5OTU+FYV7m5uVWILyIiIiIi\nIuZyqQLYzc2NtLS06x7Pzc2lWbNmAOTn5+Pj40NgYCDR0dG2Gd9f06BBA8aMGcOYMWP48ssvGTFi\nBN26dSMgIIC8vDzbuLy8PNuMslmSk5MrfdwwDFOPIyIiIiIiUtfpGmCwXZf77bffcvLkSTp16kRY\nWBgZGRmcP38egMzMTN5+++1K93/iiSc4duwYAG3atMHb2xs3NzdCQ0NZs2YN5eXlFBUVsX79ekJD\nQ2/KaxIREREREedgtVod9qeucZkZ4F+bEfX392fgwIGcO3eOyZMn4+XlxR133MHjjz9OfHw8VquV\nW265henTp1e6f3x8PAkJCVy+fBmA2NhYgoODiYuL4/Tp0/Tt2xc3NzciIyMJDw+vNB/N2IqIiIiI\niNQuw1oXy3YThYSEsG3btmovPuXoVFCLK/P3969xjGuv1xf5NWZ83sziSJ9bM87LLbfcYkIm5vjm\nm2/snYKIAEuWLDElzhNPPGFKnJvl2WeftXcKVVqwYIG9U6gWtUCLiIiIiIiIS3CZFuiqaKZURERE\nREQcmYs37ZrK5QvgI0eO2DsFERERERERuQnUAi0iIiIiIiIuweVngEVERERERByZWqDNowJYpJrc\n3GreOFFeXm5CJlKVRo0a1TiGI62mK44tNzfXlDiO9L1Qv379Gscw43fIkc6tWSuw1rXVUm8GM/5f\nBcf6HZLaU1paau8UpI5TC7SIiIiIiIi4BM0Ai4iIiIiIODC1QJtHM8AiIiIiIiLiEpyyAD5z5gzt\n27e/7vGUlBSGDx9uh4xERERERETE3py2BdowjGo9LiIiIiIi4ojUAm0epy2AqyMuLo6uXbuyfft2\nzpw5Q1hYGC+88AKGYbBv3z5mz55NQUEBt9xyC6+88grNmzcnJSWFLVu2UFhYSIcOHXjqqacYP348\n3333HaWlpXTr1o2pU6disVh47733WLVqFVarlZYtWzJz5kz8/PyYOHEit912GwcOHOD48eO0bNmS\nxYsXm7L6poiIiIiIiFTklC3QN2L79u0kJSWRmZnJ7t27+eSTT7h48SJPPfUUCQkJbN68mfj4eEaN\nGmXbJysrixkzZvDcc8+RkpKCt7c3qampbNq0CYvFwjfffMPnn3/OO++8w/Lly0lNTaVZs2bMmzfP\nFmPTpk0kJiaSmZlJTk4OGRkZ9nj5IiIiIiIiTk8zwP8rKiqKevXqAXDvvfdy4MABLBYLTZs2pVu3\nbrYxU6dO5ezZswD88Y9/5A9/+AMA/v7+HDx4kKysLP7yl78wdepUABITEwkPD8fPzw+Ahx9+mKee\nesp23Pvvvx8vLy8A2rVrx/fff1+tvGNiYmrwqkVERERExNGpBdo8TlkAu7m5VfohKSsrwzAMhg8f\nztmzZzEMg9TUVAB8fHxs43x8fDh37hyFhYWcPHmSqKgo4MoHr379+pw/fx4AX19f2z4REREUFBSQ\nmJhIdnY2Dz74IBMmTOD8+fM0adKkQuycnBzb9tXiF8Bisegm7iIiIiIiIrXEKQtgPz8/DMPg7Nmz\nNG3a1Pb48ePHCQoKYvr06dftk5eXV+Hfvr6+BAYG0rp1a9asWXPd+H//+9/XPTZ48GAGDx7MuXPn\nePbZZ/nwww8JCAioEDs3Nxd/f/+avkSb5OTkSh/XYl8iIiIiIiIVOeU1wJ6engwcOJDExERKS0sB\nOHz4MOvWrSMuLq7SfTIyMigpKaGoqIjt27fTpUsXOnXqxI8//sihQ4cAOHXqFOPHj690/8WLF7N2\n7VoAAgMDad68OYZhcP/995ORkUF+fj4Aq1atomfPnma/ZBERERERcVJWq9Vhf+oap5wBBpg8eTKv\nvfYaAwcOBK60Hs+bN4+2bdtWOr5z587Ex8dz8uRJ+vTpw3333QfA/PnzmTFjBkVFRXh4eDB69OhK\n9x8wYAATJ07k7bffxjAMOnXqxIABA/Dw8GDkyJE8+uijWK1Wbr/9dqZNm1Yrr1lERERERESqZljr\nYtlusri4OAYPHkz//v3tnYpp1AJde9zcat44oWu9a1dwcHCNY5w8edKETMQVmPGdAI71vWDG7fh+\n/vnnGsdwpHP77LPPmpAJLFiwwJQ4zsSR3mdxfPPnzzcljlm/0zfL448/bu8UqvTGG2/YO4VqcdoZ\nYBEREREREWegOUvzOOU1wNWl2VIRERERERHnpxlg4L333rN3CiIiIiIiIlLLVACLiIiIiIg4MLVA\nm0ct0CIiIiIiIuISNAMsUk1mrDLZoEEDEzKB4uJiU+I4G63gLDfTbbfdZkqc06dP1ziGI323+Pv7\n1zhGTk5OjWOYRas3V87Z3mdxfD179rR3ClLHqQAWERERERFxYGqBNo9aoEVERERERMQlqAAWERER\nERERl+A0LdAhISG0aNECi8VCeXk5wcHBTJkyhebNm9+0HNq3b09GRsYNXQ+WnZ1NTk4OXbp0qYXM\nRERERESkrlILtHmcZgbYMAySkpJITU0lPT2dkJAQZs6cedNzuFEZGRns2bPHxGxERERERETkWk4z\nA2y1Wiv8ZeSee+7hk08+qXRsSkoKaWlp+Pr6cuDAATw9PVm0aBHBwcFMnDgRHx8fdu7cyVNPPUXP\nnj2ZOXMmu3fvxmKxcN999zF+/HgMw2Dbtm384x//wMPDg5iYmArx169fzzvvvHPddm5uLhMnTuTY\nsWM0atSI8ePHU1JSwptvvkm9evUoKChgwoQJtXuyREREREREXJDTzABfq6SkhPXr1xMWFlblmB07\ndjBs2DAyMjLo1asXL7/8su25Xbt2sWbNGsLDw1m2bBnnzp0jLS2N5ORk9u7dy8aNGykvL2fy5Mm8\n8MILfPTRR7i5uVFWVmaL8cvZ4Kvbc+fOpW3btmRmZjJnzhwSEhLo0aMHffr0IT4+XsWviIiIiIhU\ncHWyzxF/6hqnmQEGiI+Px83NjZycHAIDA3nyySerHNumTRs6duwIQHh4OCNHjrQ9161bNzw8PADY\ntm0bI0aMwDAM6tevT//+/cnKyqJ9+/aUlJTQrVs3AKKjo3nppZd+M8dt27bx1ltvAXD77bezZcsW\n27FuxLUzzyIiIiIiIlI1pyqAk5KSCAwMBGDv3r3Exsaybt06Nm3axPLlyzEMg7FjxwLg4+Nj28/b\n25v8/Hzb9rXPnT9/Hm9v7wpjc3JyyM/Pp3HjxhX2+T1/AcnNza0Qr2HDhjfwSkVERERERKS6nKoA\nvrYA7dKlC0FBQezbt4/Y2FhiY2Ntz6WkpJCbm2vbzs/Pr1D0XisgIIC8vDzbdl5eHgEBAXh7e3Ph\nwgXb4zk5ObY251+2Q19bXPv5+ZGbm2tbKfrMmTM0adLkRl8yycnJlT5ekwW5RERERETEcdTFVmNH\n5ZTXAMOV2wodP36cVq1aVfn80aNHAUhPT6/y9kOhoaGsWbOG8vJyioqKWL9+PaGhobRo0QJ3d3fb\nys3Jycm2ojMwMJDs7GxKSkooLi5m06ZNtnhhYWGkpKQAcOzYMWJiYigvL8fd3b1CoSwiIiIiIiLm\ncpoZYMMwiI+Px2KxYLVaqV+/PtOnT6dt27aVju/cuTPLli1jz549NGzYkCVLllQ6Li4ujtOnT9O3\nb1/c3NyIjIwkPDwcgOnTpzNx4kTq169PTEyMrZ25a9eudOrUiYiICIKCgujduzdZWVkAjBs3jgkT\nJhAWFkbjxo2ZN28e9erVo2fPnjz33HN8//33JCYm1sIZEhERERERcW2G1QXn01NSUtiwYQNLly61\ndyq1Ri3Qjq1BgwamxCkuLjYljojcuObNm5sS5/Tp0zWO4UjfLf7+/jWOkZOTU+MYUrv0PsvN9sUX\nX5gSp0OHDqbEuVkee+wxe6dQpWXLltk7hWpx2hZoERERERERkWupABYRERERERGX4DTXAFdHdHQ0\n0dHR9k5DRERERETkN7ngVau1RjPAIiIiIiIi4hJUAIuIiIiIiIhLcMkWaBF70+rNIs7DjNWbAe68\n884axzh48KAJmZhDK/vWHkda7Vvvs9xst9xyi71TsAu1QJtHM8AiIiIiIiLiElQAi4iIiIiIiEtQ\nC7SIiIiIiIgDUwu0eZymAA4JCaFFixZYLBbgyofEMAxefPFF/vznP9+UHNq3b09GRga33XZbtffN\nzs4mJyeHLl261EJmIiIiIiIi4jQFsGEYJCUlERgYaNccblRGRgZlZWUqgEVERERERGqJ0xTAVqv1\nd7cGpKSkkJaWhq+vLwcOHMDT05NFixYRHBzMxIkT8fHxYefOnTz11FP07NmTmTNnsnv3biwWC/fd\ndx/jx4/HMAy2bdvGP/7xDzw8PIiJiakQf/369bzzzjvXbefm5jJx4kSOHTtGo0aNGD9+PCUlJbz5\n5pvUq1ePgoICJkyYUCvnSERERERE6h61QJvHZRfB2rFjB8OGDSMjI4NevXrx8ssv257btWsXa9as\nITw8nGXLlnHu3DnS0tJITk5m7969bNy4kfLyciZPnswLL7zARx99hJubG2VlZbYYv5wNvro9d+5c\n2rZtS2ZmJnPmzCEhIYEePXrQp08f4uPjVfyKiIiIiIjUEqeZAQaIj4+vcA2wv78/y5cvr3RsmzZt\n6NixIwDh4eGMHDnS9ly3bt3w8PAAYNu2bYwYMQLDMKhfvz79+/cnKyuL9u3bU1JSQrdu3QCIjo7m\npZde+s0ct23bxltvvQXA7bffzpYtW2zHuhHXzjyLiIiIiIhI1ZyqAK7qGuAVK1awfPlyDMNg7Nix\nAPj4+Nie9/b2Jj8/37Z97XPnz5/H29u7wticnBzy8/Np3LhxhX1+T2tCbm5uhXgNGzb8na9ORERE\nRERckVqgzeNUBXBVH4zY2FhiY2Nt2ykpKeTm5tq28/PzKxS91woICCAvL8+2nZeXR0BAAN7e3ly4\ncMH2eE5Ojq3N+Zft0NcW135+fuTm5tpWij5z5gxNmjSpzsusIDk5udLHa7Igl4iIiIiIiDNy2WuA\ns7OzOXr0KADp6elVrr4cGhrKmjVrKC8vp6ioiPXr1xMaGkqLFi1wd3dnz549wJVC9GrRGRgYSHZ2\nNiUlJRQXF7Np0yZbvLCwMFJSUgA4duwYMTExlJeX4+7uXqFQFhEREREREXM5zQywYRjXXQNsGMZ1\ns79Xde7cmWXLlrFnzx4aNmzIkiVLKo0bFxfH6dOn6du3L25ubkRGRhIeHg7A9OnTmThxIvXr1ycm\nJsbWzty1a1c6depEREQEQUFB9O7dm6ysLADGjRvHhAkTCAsLo3HjxsybN4969erRs2dPnnvuOb7/\n/nsSExNr4xSJiIiIiEgdVF5ebu8UnIZhdcGG8pSUFDZs2MDSpUvtnUqtUQu0iEjdcuedd9Y4xsGD\nB03IRBxdgwYNTIlTXFxsShyRm+nMmTOmxLl6OWJdMXToUHunUKWVK1faO4VqcdkWaBEREREREXEt\nTtMCLSIiIiIi4oxcsGm31rhkARwdHU10dLS90xAREREREZGbSC3QIiIiIiIi4hJUAIuIiIiIiIhL\ncMkWaBERERERkbpC1wCbRwWwSDW5udW8cUL3chNxHmbdkubw4cM1jtGjRw8TMoHPPvusxjHM+K6s\nX79+jWOAObf7MeP1mEW3LxJX9v3335sSp67dBknM4zjf5iIiIiIiIiK1SDPAIiIiIiIiDkwt0OZx\n6hngsLAw9u/ff1OONXnyZBYuXHjD+69evdrEbEREREREROSXnLoArit+/PFH3n77bXunISIiIiIi\n4tRcsgAOCQkhKSmJgQMH0r17dz744AMAdu/ezZAhQxg9ejTjxo0DIC0tjf79+xMVFcVjjz3GqVOn\nAMjLy2PEiBH07t2bJ554gsLCwgrxf/jhh0q333zzTXr37k1ERAQvvvgiAEOHDuX7778nKiqKy5cv\n35RzICIiIiIidYPVanXYn7rGJQtggBMnTrBu3TqWL1/OrFmzyM/PB+DIkSM8+uijvPzyy/zP//wP\nU6ZMYfHixaSmpnL//fczZcoU4Eohe8stt5CZmcnzzz9fYcVMwzAqHOvq9t69e6pQmF0AACAASURB\nVFm7di0bNmxgw4YN7Nu3j02bNjFr1ixuu+02UlNTcXfXZdkiIiIiIiK1wWUL4IcffhiAli1b0qpV\nKw4dOgSAp6cnd999NwBZWVncc889/OEPfwBg0KBB7N69m/Lycvbt20dkZCQAQUFB/OUvf7HFruov\nIdu3byc0NJQGDRrg4eFBUlISDzzwQK29RhEREREREfk/Tj/dWF5eTmRkJIZh0LFjR+bMmQOAj4+P\nbYyXlxcFBQXceuut+Pr62h4/f/483t7etu3GjRtjtVrJzc0lLy8PLy8v23PXxqtKbm4ugYGBtm0z\n7m8YExNT4xgiIiIiIuK46mKrsaNy+gLYzc2NtLS06x7Pzc2lWbNmAOTn51dawAYEBHDw4EHbdn5+\nPm5ubvj5+eHj41Phut/z58/bZord3NwoLy+37XOVn58feXl5tu1r/y0iIiIiIiK1y2VboDdu3AjA\nt99+y8mTJ+nUqdN1Y7p3786+ffs4ffo0AB988AHdu3fHzc2NO++8k4yMDABOnjzJvn37bPsFBgZy\n9OhRANauXYub25XTHBYWxpYtWygsLOTy5cs8/fTTZGVl4e7uzsWLFykrK6v260hOTq70R0RERERE\nRCpy6hngXy5GdS1/f38GDhzIuXPnmDx5coV25quaNGnCzJkzefLJJykrK6N58+bMmDEDgMcff5wx\nY8bQu3dvWrduTXh4uG2/0aNHM3XqVObPn8+QIUNo3LgxAJ06dWLEiBEMGDCAevXqcf/999O3b18u\nXryIj48PPXr0ICUlhaZNm5p8JkREREREpK5SC7R5DKsLns2QkBC2bdtGkyZN7J1Krfm14l9q5uqM\nfk1cbZEXkbqvQYMGpsS5kS6gX7q6iGNNXXtngxtlxnelGWtlABQXF9c4hhmvxyz6P0Rc2Z49e0yJ\n06VLF1Pi3CwPPfSQvVOo0tq1a+2dQrU4zre5iIiIiIiISC1y6hboqmh2VERERERE6goXbNqtNS5Z\nAB85csTeKYiIiIiIiMhNphZoERERERERcQkuOQMsIiIiIiJSV6gF2jyaARYRERERERGXoBlgkWrS\n7SdEaubWW2+tcYwff/zRhEzMYcYtdsxixu2LzGLGd6UjnVtH+u4343cIzPk96t27d41jZGZm1jiG\nuI6ioiJ7pyB1nApgERERERERB+ZIf4Sr69QCLSIiIiIiIi7BaQrgM2fO0L59++seT0lJYfjw4Tcl\nh/Xr1xMXF3fD+6empnLx4kUTMxIREREREZGrnKYABjAMo1qP38wcfo8FCxZw4cIFE7MREREREZG6\nzmq1OuxPXeNUBXB1xMXFsXDhQh555BF69OjB888/b3sDQ0JCePPNN4mMjMRqtXL06FGGDh1KZGQk\n0dHRtkVGrFYr06dPp2fPngwePJijR49WiL9hw4ZKtz/99FP69etHREQETzzxBPn5+UyaNIns7Gzi\n4+PZv3//TTwTIiIiIiIirsFlC2CA7du3k5SURGZmJnv27OGTTz6p8HxaWhoACQkJxMXFkZaWxowZ\nM0hISKCoqIhPP/2UHTt2kJaWxvLly9m7d+9vHrO4uJhx48aRmJhIeno6LVq0YP78+cyaNQuApKQk\n/uM//sP8FysiIiIiIuLiXHoV6KioKOrVqwfAvffey4EDBwgLCwMgNDQUgNOnT/PTTz8RFRUFQIcO\nHQgKCuKLL75g7969hIaG4unpCUBkZOR1RfQv7d+/n9tuu43WrVsDMG7cuArP18U2AhERERERqT1a\nBdo8TlMAu7m5VVo8lpWVYRgGw4cP5+zZsxiGQWpqKgA+Pj62cT4+Ppw7d67CNsD58+fx9vauENPL\ny4ucnBzy8/MJDAy0Pf7LcZXJzc3Fy8vLtu3uXrO3ICYmpkb7i4iIiIiIuAqnKYD9/PwwDIOzZ8/S\ntGlT2+PHjx8nKCiI6dOnX7dPXl5ehX/7+vpeN8bf35/8/Pzr9gsICMDb27vColXnz5+3/dtisVBW\nVmbbLigosOWZm5tre/zSpUvk5+fTpEmT6rxcERERERERqSanuQbY09OTgQMHkpiYSGlpKQCHDx9m\n3bp1Vd6aKCMjg5KSEoqKiti+fTtdunS5bkzz5s1p0qSJbdZ4//795OTk0LFjR+68804+++wzLl26\nRHFxMenp6bb9br31Vv79738DcODAAY4fPw7AXXfdxU8//cSXX34JwKJFi1i0aBFwZTa4sLCwWq87\nOTm50h8REREREXEO9l7p2ZlWgXaaGWCAyZMn89prrzFw4EDgShvzvHnzaNu2baXjO3fuTHx8PCdP\nnqRPnz7cd999wPW3Mnr11VeZMmUKCxcupGHDhiQmJuLp6UlYWBiffvopERER3HrrrYSGhrJnzx4A\nhg8fztixY/n000+5++676dGjB3ClUF+wYAHPPfccAH/84x+ZM2cOABEREQwZMoSZM2cSERFh/gkS\nERERERFxYYa1LpbtJoiLi2Pw4MH079/f3qnUipt572MRkeq49dZbaxzjxx9/NCETkbrJjN8hMOf3\nqHfv3jWOkZmZWeMY4jq2bdtmSpyrE191Rd++fe2dQpU++ugje6dQLU41AywiIiIiIuJstAq0eZzm\nGuDq0gypiIiIiIiIa3HZGeD33nvP3imIiIiIiIjITeSyBbCIiIiIiEhd4KLLNtUKl22BFhERERER\nEdeiAlhERERERERcglqgRVxcTEyMKXGSk5NNiSPOT7cwqj3e3t6mxCkoKKhxjI4dO9Y4xqFDh2oc\nw9GY8R450u+QGbcwMuOzAs75eZHrrV692pQ4de02SGqBNo9mgEVERERERMQlqAAWERERERERl2DX\nFuiQkBBatGiBxWKhvLyc4OBgpkyZQvPmzW96Lp999hlt2rShadOmVY7Jycnh888/Jyws7CZmJiIi\nIiIirqy8vNzeKTgNu84AG4ZBUlISqamppKenExISwsyZM+2Sy7Jlyzhz5syvjtm1axdbtmy5SRmJ\niIiIiIiImew6A2y1Witc0H3PPffwySefVDq2qKiI8ePH891331FaWkq3bt2YOnUq69evJy0tDV9f\nXw4cOICnpyeLFi0iODiY/Px8pk6dytGjR3F3d2fAgAGMHDkSuDL7PHbsWFJSUoiIiGDXrl189913\njBs3jjZt2vD8889z4cIFSktLiY+Pp3PnzsyYMYPy8nKKi4uZO3cumZmZJCYmcunSJYKDg5k7dy6+\nvr5cunSJ//qv/+Lo0aNcvnyZPn36MGHCBADi4uK499572bJlCydPnuTpp5+moKCA9evXY7FYeOON\nNwgKCqr9ky8iIiIiIuJiHOYa4JKSEtavX19le3FKSgre3t6kpqayadMmLBYL33zzDQA7duxg2LBh\nZGRk0KtXL15++WUA5s6di4+PD+np6axYsYKVK1eyf//+CnHT0tIYNWoUgYGBzJ07l8jISBYuXMiQ\nIUPYuHEjq1atYufOnbRt25Zhw4YRHh7O3LlzOXXqFBMmTOC1114jIyODrl27MmXKFABWrlxJcXEx\n6enppKSkkJKSUuG4+/bt4/3332fWrFm88sorNGvWjLS0NFq1asXatWtr4/SKiIiIiEgddXXi0BF/\n6hq7F8Dx8fFERkbSo0cPvvzyyypvyeLv78/BgwfJysri8uXLTJ06lZCQEADatGljW0I/PDycAwcO\nAPDpp5/y6KOPAuDj40OfPn3IysqyxQwNDa1wjKtvoL+/P5s3b+bw4cP4+vqycOFCPDw8Kozdvn07\nXbt2pXXr1gA88sgjbNmyBavVyvDhw1m0aBEAXl5etG3bllOnTtn27dmzJ25ubrRr145Lly4REREB\nQLt27Th37lz1T6KIiIiIiIj8JrvfBzgpKYnAwEAA9u7dS2xsLOvWrWPTpk0sX74cwzAYO3YsERER\nFBQUkJiYSHZ2Ng8++KCtrdjHx8cWz9vbm/z8fADOnz9/3XPX3jvv2ueuNW7cOF5//XVGjx5NSUkJ\nf/vb32yF9FWFhYXs2bOHqKgo4Erx7OPjQ25uLoWFhcyePZvs7Gzc3Nw4e/YsDz30kG3fRo0aAWCx\nWADw9PS0bZeVlVXr/Jl1D1cRERERERFnZ/cC+Npp8y5duhAUFMS+ffuIjY0lNja2wtjBgwczePBg\nzp07x7PPPsuHH36Iu7s7ubm5tjH5+fm2wjYgIIC8vDzbys55eXkEBAT8Zk4NGjRgzJgxjBkzhi+/\n/JIRI0bQvXv3CmMCAwP561//SmJi4nX7jxs3jg4dOvD6668DMHTo0N95NkRERERERCpylVWgP/74\nYxYsWEBpaSm+vr688MILtGnThldeeYXMzEzc3Nzo3bs3Y8eOveFj2L0F+lrZ2dkcP36cVq1aXffc\n4sWLbdfHBgYG0rx5cwzDsO139OhRANLT0+nSpQtwpcV51apVwJXZ4IyMjOvanq/y8PCgsLAQgCee\neIJjx44BV9qrvb29MQwDd3d32+xyjx492Ldvn621+dChQ8yaNQu4cruk22+/HYCsrCxOnDjBxYsX\nKz1uTfvmk5OTK/0RERERERGpK3744QcmTpzIvHnz+Oijj+jbty/PP/88qamp7N27l40bN/Lhhx+y\ne/duNm/efMPHsesMsGEYxMfHY7FYsFqt1K9fn+nTp9O2bdvrxg4YMICJEyfy9ttvYxgGnTp1YsCA\nAWzcuJHOnTuzbNky9uzZQ8OGDVmyZAkAo0ePZtq0aURGRmKxWHj88cfp0KGD7djXCg8PZ8yYMfz9\n738nPj6ehIQELl++DEBsbCzBwcF0796dd955h0GDBrF69WqmT5/OM888w+XLl2nUqBGTJk0C4Mkn\nn2T27NksWrSI3r1788wzzzB//nzuuOOO6477y20RERERERFX4+Hhwbx582yToXfddRevvvoq6enp\nREdH4+5+pXR98MEHSU9P54EHHrih4xjWurh01zVSUlLYsGEDS5cutXcqDkWFtfxeZl1Hrs4DEfvz\n9vY2JU5BQUGNY1xdnLImDh06VOMYjsaM98iM98eRmPFZAef8vMj1nnnmGVPiLFiwwJQ4N0vPnj3t\nnUKVqrqNbU29+eab7N69m3PnzjFx4kS6desGwGeffcYrr7zCunXrbiiu3a8BFhERERERkbqpqsmU\nmkyO7Ny5k/fee493332XJ554gnr16tme8/T0pLi4+IZjO9Q1wCIiIiIiIuK6MjMzmTRpEm+++Sat\nW7emQYMGlJSU2J4vLi6mYcOGNxy/zs8AR0dHEx0dbe80REREREREaoUjX7Vq5mVwO3bsYNasWSxd\nupSWLVsC0KpVK06cOGFrgT5x4gStW7e+4WNoBlhERERERETs6tKlS0yaNImFCxfail+AyMhI/vWv\nf1FcXMzFixdZtWoV/fr1u+Hj1PkZYBEREREREanbPv74Y3Jzc3nuueeAK7PehmGwfPlyvvrqKwYO\nHIhhGPTv37/KW9v+HiqARURERERExK769u1L3759K31u7NixjB071pTjqAAWcXFmXbcxaNCgGsdY\nvXq1CZmAj49PjWPk5+ebkInI7+dIn1szcjHjljR33nlnjWMAHDx40JQ4ZjDjFkZmvD/gON9zZt2+\nyIzPiyN9VqRyR44csXcKdlFeXm7vFJyGrgEWERERERERl6ACWERERERERFyCXVugQ0JCaNGiBRaL\nBfi/C51ffPFF/vznP9/UXD777DPatGlD06ZNqxyTk5PD559/TlhY2E3MTEREREREXJkj3waprrFr\nAWwYBklJSQQGBtozDQCWLVvGk08++asF8K5du9i5c6cKYBERERERkTrIrgWw1Wr93X/NKCoqYvz4\n8Xz33XeUlpbSrVs3pk6dyvr160lLS8PX15cDBw7g6enJokWLCA4OJj8/n6lTp3L06FHc3d0ZMGAA\nI0eOBK7MPo8dO5aUlBQiIiLYtWsX3333HePGjaNNmzY8//zzXLhwgdLSUuLj4+ncuTMzZsygvLyc\n4uJi5s6dS2ZmJomJiVy6dIng4GDmzp2Lr68vly5d4r/+6784evQoly9fpk+fPkyYMAGAuLg47r33\n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\neYMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa11faeacd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cm = plot_cm(y_test, y_pred, labels=sorted_labels + [\"O\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Done\n"
     ]
    }
   ],
   "source": [
    "print_sequences(dev_sequences, y_pred, \"dev.crf.bieou.tsv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "processed 23050 tokens with 937 phrases; found: 670 phrases; correct: 291.\r\n",
      "accuracy:  93.86%; precision:  43.43%; recall:  31.06%; FB1:  36.22\r\n",
      "          company: precision:  48.28%; recall:  19.44%; FB1:  27.72  29\r\n",
      "         facility: precision:  36.36%; recall:  26.09%; FB1:  30.38  33\r\n",
      "          geo-loc: precision:  46.74%; recall:  53.09%; FB1:  49.71  184\r\n",
      "            movie: precision:  16.67%; recall:   5.56%; FB1:   8.33  6\r\n",
      "      musicartist: precision:   0.00%; recall:   0.00%; FB1:   0.00  8\r\n",
      "            other: precision:  30.25%; recall:  20.11%; FB1:  24.16  119\r\n",
      "           person: precision:  53.04%; recall:  53.69%; FB1:  53.36  247\r\n",
      "          product: precision:  14.29%; recall:   6.52%; FB1:   8.96  21\r\n",
      "       sportsteam: precision:  40.00%; recall:   7.62%; FB1:  12.80  20\r\n",
      "           tvshow: precision:   0.00%; recall:   0.00%; FB1:   0.00  3\r\n"
     ]
    }
   ],
   "source": [
    "## FINAL MODEL\n",
    "\n",
    "\n",
    "! cat dev.crf.bieou.tsv | tr '\\t' ' ' | perl -ne '{chomp;s/\\r//g;print $_,\"\\n\";}' | python data/conlleval.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "processed 23050 tokens with 937 phrases; found: 587 phrases; correct: 268.\r\n",
      "accuracy:  94.06%; precision:  45.66%; recall:  28.60%; FB1:  35.17\r\n",
      "          company: precision:  40.00%; recall:  19.44%; FB1:  26.17  35\r\n",
      "         facility: precision:  37.04%; recall:  21.74%; FB1:  27.40  27\r\n",
      "          geo-loc: precision:  50.00%; recall:  52.47%; FB1:  51.20  170\r\n",
      "            movie: precision:  14.29%; recall:   5.56%; FB1:   8.00  7\r\n",
      "      musicartist: precision:   0.00%; recall:   0.00%; FB1:   0.00  5\r\n",
      "            other: precision:  31.25%; recall:  16.76%; FB1:  21.82  96\r\n",
      "           person: precision:  55.66%; recall:  48.36%; FB1:  51.75  212\r\n",
      "          product: precision:  17.65%; recall:   6.52%; FB1:   9.52  17\r\n",
      "       sportsteam: precision:  41.18%; recall:   6.67%; FB1:  11.48  17\r\n",
      "           tvshow: precision:   0.00%; recall:   0.00%; FB1:   0.00  1\r\n"
     ]
    }
   ],
   "source": [
    "! cat dev.crf.bieou.tsv | tr '\\t' ' ' | perl -ne '{chomp;s/\\r//g;print $_,\"\\n\";}' | python data/conlleval.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "processed 23050 tokens with 937 phrases; found: 420 phrases; correct: 196.\r\n",
      "accuracy:  94.00%; precision:  46.67%; recall:  20.92%; FB1:  28.89\r\n",
      "          company: precision:  78.57%; recall:  15.28%; FB1:  25.58  14\r\n",
      "         facility: precision:  35.29%; recall:  13.04%; FB1:  19.05  17\r\n",
      "          geo-loc: precision:  51.28%; recall:  37.04%; FB1:  43.01  117\r\n",
      "            movie: precision:  50.00%; recall:   5.56%; FB1:  10.00  2\r\n",
      "      musicartist: precision:   0.00%; recall:   0.00%; FB1:   0.00  1\r\n",
      "            other: precision:  18.97%; recall:   6.15%; FB1:   9.28  58\r\n",
      "           person: precision:  51.50%; recall:  42.21%; FB1:  46.40  200\r\n",
      "          product: precision:  25.00%; recall:   2.17%; FB1:   4.00  4\r\n",
      "       sportsteam: precision:  42.86%; recall:   2.86%; FB1:   5.36  7\r\n",
      "           tvshow: precision:   0.00%; recall:   0.00%; FB1:   0.00  0\r\n"
     ]
    }
   ],
   "source": [
    "! cat dev.crf.bieou.tsv | tr '\\t' ' ' | perl -ne '{chomp;s/\\r//g;print $_,\"\\n\";}' | python data/conlleval.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline score\n",
    "```\n",
    "==> data/result/4/dev.tsv.feats.SUMMARY <==\n",
    "processed 23050 tokens with 933 phrases; found: 765 phrases; correct: 298.\n",
    "accuracy:  93.80%; precision:  38.95%; recall:  31.94%; FB1:  35.10\n",
    "          company: precision:  40.00%; recall:  19.44%; FB1:  26.17  35\n",
    "         facility: precision:  18.37%; recall:  20.00%; FB1:  19.15  49\n",
    "          geo-loc: precision:  46.82%; recall:  50.00%; FB1:  48.36  173\n",
    "            movie: precision:   0.00%; recall:   0.00%; FB1:   0.00  4\n",
    "      musicartist: precision:   0.00%; recall:   0.00%; FB1:   0.00  10\n",
    "            other: precision:  32.82%; recall:  24.02%; FB1:  27.74  131\n",
    "           person: precision:  45.36%; recall:  56.15%; FB1:  50.18  302\n",
    "          product: precision:  13.16%; recall:  10.87%; FB1:  11.90  38\n",
    "       sportsteam: precision:  47.06%; recall:   7.62%; FB1:  13.11  17\n",
    "           tvshow: precision:  16.67%; recall:  12.50%; FB1:  14.29  6\n",
    "\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "submission_sequences = load_sequences(\"data/test.txt\", sep=\"\\t\", notypes=False, test_data=True) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Tag(token='New', tag='?'),\n",
       " Tag(token='Orleans', tag='?'),\n",
       " Tag(token='Mother', tag='?'),\n",
       " Tag(token=\"'s\", tag='?'),\n",
       " Tag(token='Day', tag='?'),\n",
       " Tag(token='Parade', tag='?'),\n",
       " Tag(token='shooting', tag='?'),\n",
       " Tag(token='.', tag='?'),\n",
       " Tag(token='One', tag='?'),\n",
       " Tag(token='of', tag='?'),\n",
       " Tag(token='the', tag='?'),\n",
       " Tag(token='people', tag='?'),\n",
       " Tag(token='hurt', tag='?'),\n",
       " Tag(token='was', tag='?'),\n",
       " Tag(token='a', tag='?'),\n",
       " Tag(token='10-year-old', tag='?'),\n",
       " Tag(token='girl', tag='?'),\n",
       " Tag(token='.', tag='?'),\n",
       " Tag(token='WHAT', tag='?'),\n",
       " Tag(token='THE', tag='?'),\n",
       " Tag(token='HELL', tag='?'),\n",
       " Tag(token='IS', tag='?'),\n",
       " Tag(token='WRONG', tag='?'),\n",
       " Tag(token='WITH', tag='?'),\n",
       " Tag(token='PEOPLE', tag='?'),\n",
       " Tag(token='?', tag='?')]"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission_sequences[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3856 3856\n"
     ]
    }
   ],
   "source": [
    "X_submission = [sent2features(s, vocab=None,\n",
    "                        dict_features=dict_features, vocab_presence_only=False,\n",
    "                        window=2, interactions=True, dict_interactions=False, lowercase=False, dropout=0)\n",
    "          for s in submission_sequences]\n",
    "y_submission = [sent2labels(s) for s in submission_sequences]\n",
    "print len(X_submission), len(y_submission)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_pred_submission = crf.predict(X_submission)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Done\n"
     ]
    }
   ],
   "source": [
    "print_sequences(submission_sequences, y_pred_submission,\n",
    "                \"Shubhanshu.DeepER.UIUC.WNUT_NER.10_types.txt\",\n",
    "                test_data=True,)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "dict_features.word2hashtagdictionaries[\"houseofcards\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "found_seq=False\n",
    "for seq in dev_sequences:\n",
    "    for t in seq:\n",
    "        if t.token == \"#HouseofCards\":\n",
    "            found_seq = True\n",
    "            break\n",
    "    if found_seq:\n",
    "        break\n",
    "print seq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "seq_features = sent2features(seq, vocab=vocab,\n",
    "                         dict_features=dict_features, vocab_presence_only=True, window=3, verbose=True)\n",
    "\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for i, (k,v) in enumerate(zip(seq, seq_features)):\n",
    "    print \"[%s]\\t%s - %s:\\n\\t%s\\n\" % (i, k.token, k.tag, \"\\t\".join(v.keys()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "seq_features[17]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
